windows使用某个软件的时候使其自动化操作
1、下载AutoHotKey, 官网:https://www.autohotkey.com/,下载之后安装,
2、写代码定义热键:
; 定义热键:按下字母 'a' 执行以下操作 a:: { ; --- 重要:请先手动获取按钮的坐标!--- ; 打开你的目标软件,将鼠标悬停在那个按钮上。 ; 运行 Window Spy (在任务栏AutoHotkey图标上右键可以找到), ; 查看并记下鼠标当前的 "屏幕坐标" (例如 X: 500, Y: 300)。 ; 然后将下面一行中的 X500 和 Y300 替换为你记下的实际坐标。 MouseMove, 203, 449, 0 ; 参数:X坐标, Y坐标, 移动速度(0为瞬间移动) Sleep, 50 ; 短暂等待50毫秒,确保鼠标已到位 Click ; 执行鼠标左键单击 Return ; 脚本结束 } ; --- 第二个热键:按 S 键点击按钮2 --- b:: { ; 请将坐标替换为【按钮2】的实际位置 MouseMove, 208, 560, 0 Sleep, 50 Click Return } c:: { ; 请将坐标替换为【按钮2】的实际位置 MouseMove, 203, 449, 0 Sleep, 50 Click Return }
至于坐标问题,我们只需要打开已经安装好的:window spy for AHKv2这个软件,然后鼠标移动到某个位置之后,就显示了坐标如下图:

第一个X轴,第二个Y轴,分别填入即可,然后将添加的文件后缀改为: .ahk的文件后缀,然后双击运行即可,然后按住你已经设置的热键测试一下就可以了
3、使用.net语言自动化控制按键操作:我这里设置的是每天下午20:10分,执行按键b,所以要使用.net需要安装.net环境,
微软官方下载:https://dotnet.microsoft.com/zh-cn/download/dotnet,然后选择对应的版本下载安装就可以了
4、创建项目并运行:新建一个文件夹(比如D:\AutoKey),在里面新建Program.cs文件,粘贴修复后的代码。
using System; using System.Runtime.InteropServices; using System.Threading; namespace AutoKeyScheduler { class Program { // Windows API:模拟键盘按键 [DllImport("user32.dll")] private static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, UIntPtr dwExtraInfo); // 按键按下/释放标记 private const uint KEYEVENTF_KEYDOWN = 0x0000; private const uint KEYEVENTF_KEYUP = 0x0002; // 标记是否已执行当日按键(避免重复触发) private static bool bExecuted = false; private static bool aExecuted = false; private static bool cExecuted = false; private static bool dExecuted = false; static void Main(string[] args) { Console.OutputEncoding = System.Text.Encoding.UTF8; Console.WriteLine("===== .NET 定时按键程序(Windows)====="); Console.WriteLine("任务计划:"); Console.WriteLine("1. 每天20:10 执行按键 b"); Console.WriteLine("2. 每天20:11 执行按键 a"); Console.WriteLine("3. 每天20:12 执行按键 c"); Console.WriteLine("4. 每天20:13 执行按键 d"); Console.WriteLine("======================================"); Console.WriteLine("按 Ctrl+C 退出程序\n"); // 主循环:每秒检测一次时间 while (true) { var now = DateTime.Now; // 20:10 执行按键b if (now.Hour == 20 && now.Minute == 10 && !bExecuted) { PressKey('b'); bExecuted = true; } // 20:11 执行按键a if (now.Hour == 20 && now.Minute == 11 && !aExecuted) { PressKey('a'); aExecuted = true; } // 20:12 执行按键c if (now.Hour == 20 && now.Minute == 12 && !cExecuted) { PressKey('c'); cExecuted = true; } // 20:13 执行按键d if (now.Hour == 20 && now.Minute == 13 && !dExecuted) { PressKey('d'); dExecuted = true; } // 每天0点重置所有执行标记 if (now.Hour == 0 && now.Minute == 0 && now.Second == 0) { bExecuted = false; aExecuted = false; cExecuted = false; dExecuted = false; Console.WriteLine($"\n【{DateTime.Now:yyyy-MM-dd HH:mm:ss}】重置执行标记,等待次日任务..."); } // 每秒检测一次,降低CPU占用 Thread.Sleep(1000); } } /// <summary> /// 模拟按下并释放指定按键 /// </summary> /// <param name="key">要按下的字符(小写)</param> private static void PressKey(char key) { try { // 将字符转换为虚拟键码 byte vkCode = (byte)VkKeyScan(key); // 按下按键 keybd_event(vkCode, 0, KEYEVENTF_KEYDOWN, UIntPtr.Zero); Thread.Sleep(100); // 短暂延迟,确保系统识别 // 释放按键 keybd_event(vkCode, 0, KEYEVENTF_KEYUP, UIntPtr.Zero); // 打印执行日志 Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss} 成功执行按键:{key}"); } catch (Exception ex) { Console.WriteLine($"{DateTime.Now:yyyy-MM-dd HH:mm:ss} 执行按键{key}失败:{ex.Message}"); } } /// <summary> /// 将字符转换为Windows虚拟键码 /// </summary> [DllImport("user32.dll")] private static extern short VkKeyScan(char ch); } }
按下Win+R输入cmd打开命令提示符,切换到该文件夹:
cd D:\AutoKey #初始化控制台项目 dotnet new console -n AutoKeyScheduler #替换自动生成的Program.cs(已粘贴好代码可跳过),然后编译并运行: dotnet run
#生成可执行文件并发布
dotnet publish -c Release -r win10-x64 --self-contained true

浙公网安备 33010602011771号