程序员的懒人神器,使用 .NET 制作一个一键打开浏览器并恢复历史记录的小工具

Coding-133

前言

嗨,大家好!

我平时有一个习惯,喜欢把不同类别的网页放在不同的浏览器窗口。

比如,常用的一些页面放在 Edge 浏览器 A 窗口,开发相关的页面放在 B 窗口,购物的页面放在 C 窗口,……等等,这样工作时可以很快地找到相应的页面。

但这样也有一个问题,每天上班时,我都得先打开浏览器,再一个个恢复历史记录窗口,这个过程还挺耗时的。

有一天,我突发奇想:有没有一个工具可以一键搞定这一切呢?

有没有一个工具可以快速打开这些窗口呢?我找了一圈,可惜没有找到,那就自己动手写一个吧,程序员天生就是懒人,最擅长的就是无中生有嘛!哈哈……

以下是实现的详细步骤,分享给有相同苦恼的你,来看看是怎么实现的吧!

Step By Step 步骤

1. 创建一个 .NET FrameWork 控制台应用程序
2. 安装以下 Nuget 包:

为了模拟键盘操作(如 Ctrl+Shift+T),我们需要安装 InputSimulator 这个第三方开源包,它可以通过 Win32 API 来模拟按键和鼠标事件。

<package id="InputSimulator" version="1.0.4.0" targetFramework="net48" />
3. 创建创建配置文件

创建一个名为 EdgeHisNum.txt 的文本文件,用于指定要打开的历史记录数量。例如:

6

将该文件的 “复制到输出目录” 属性设置为 “较新则复制”,以便在编译时自动复制到输出目录。

4. 编写代码

接下来,在 Program.cs 文件里编写打开浏览器和恢复历史记录的代码。以下是完整的代码示例,留意代码中的详细注释

using System;
using System.Collections.Generic;
using System.Threading;
using System.Diagnostics;
using WindowsInput;
using WindowsInput.Native;
using System.IO;

namespace OpenBrowser
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 运行前先确保浏览器已经关闭
            Console.Write("浏览器都已经关闭了吗?(y / n):");
            var answer = Console.ReadLine();
            if (answer != "y") return;

            var edgePath = @"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe";
            OpenBrowser(edgePath, "edge");
        }

        /// <summary>
        /// 打开浏览器并恢复历史记录
        /// </summary>
        /// <param name="browserPath">浏览器可执行文件路径</param>
        /// <param name="browserType">浏览器类型</param>
        private static void OpenBrowser(string browserPath, string browserType)
        {
            // 读取需打开的浏览器历史记录数量配置
            var historyNum = GetBrowserHistoryNum(browserType);
            Console.WriteLine($"{browserType} 浏览器要打开的最近关闭的历史记录的数量是 [{historyNum}]");

            using (Process browserProcess = new Process())
            {
                // 启动参数所对应的浏览器
                Console.WriteLine($"准备启动 {browserType} 浏览器......");
                browserProcess.StartInfo.FileName = browserPath;
                browserProcess.Start();

                Console.WriteLine($"等待 {browserType} 浏览器启动完成......");
                browserProcess.WaitForInputIdle();

                // 等待 1 秒确定浏览器完全打开
                Thread.Sleep(1000);

                InputSimulator simulator = new InputSimulator();
                for (var i = 1; i <= historyNum; i++)
                {
                    // 模拟按 Ctrl+Shift+T 键打开历史记录
                    List<VirtualKeyCode> modifierKeycodes = new List<VirtualKeyCode>();
                    modifierKeycodes.Add(VirtualKeyCode.CONTROL);
                    modifierKeycodes.Add(VirtualKeyCode.SHIFT);
                    simulator.Keyboard.ModifiedKeyStroke(modifierKeycodes, VirtualKeyCode.VK_T);
                    Console.WriteLine($"打开第 {i} 个最近关闭的历史记录");
                }
            }
        }

        /// <summary>
        /// 读取需打开的浏览器历史记录数量配置
        /// </summary>
        /// <param name="browserName"></param>
        /// <returns></returns>
        private static int GetBrowserHistoryNum(string browserName)
        {
            int historyNum = 0;
            string filePath = "EdgeHisNum.txt";
            using (StreamReader sr = new StreamReader(filePath))
            {
                historyNum = int.Parse(sr.ReadToEnd());
            }

            return historyNum;
        }
    }
}
5. 编译并制作批处理文件

当代码 Debug 无误后,编译程序,并创建一个简单的批处理文件(.bat),将其放在桌面上。每天上班时,只需要点击这个批处理文件,你就可以悠闲地喝着水,看着程序自动为你打开浏览器并恢复昨天下班时最后关闭的几个常用窗口,是不是很爽!?

总结

小技巧,大作用。

通过这个小小的工具,我就可以一键打开 Edge 浏览器并恢复历史记录窗口,大大提升了日常工作效率。

程序的实现并不复杂,但却能带来意想不到的效果。稍微改一下代码,也可以打开 Chrome 浏览器的历史记录,如果你也有和我一样的苦恼,不妨拿去试试吧!

好了,今天的分享就到这里啦,如果觉得有用,别忘了点个【赞与在看】哦,你的支持是我最大的动力!

往期精彩

  1. 把 C# 里的 HttpClient 封装起来,告别复杂的配置,让 Restful API 调用更轻松更高效
  2. C#12 中 5 个节省你开发时间的的改进
  3. C# 静态类,高手不想让你知道的 15 个真相
  4. 封装一个 C# 范围判断函数,从此告别重复编写范围判断代码的烦恼
  5. 用 C# Stopwatch 计时,让代码性能飞起来!
  6. 轻装上阵,Visual Studio LocalDB:.NET 程序员的本地数据库神器
  7. 封装一个C#万能基础数据类型转换器,一招解决所有基础类型转换烦恼
  8. 闲话 .NET(7):.NET Core 能淘汰 .NET FrameWork 吗?
  9. 常用的 4 种 ORM 框架(EF Core,SqlSugar,FreeSql,Dapper)对比总结
  10. C# AutoMapper 10个常用方法总结
  11. C# 7个方法比较两个对象是否相等
  12. C# 去掉字符串最后一个字符的 4 种方法

我是老杨,一个执着于编程乐趣、至今奋斗在一线的 10年+ 资深研发老鸟,是软件项目管理师,也是快乐的程序猿,持续免费分享全栈实用编程技巧、项目管理经验和职场成长心得!欢迎点击下方卡片关注老杨的公众号(名称:代码掌控者)!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值