如何用 AutoHotkey 实现鼠标自动化:操作录制与智能回放完整指南
如何用 AutoHotkey 实现鼠标自动化:操作录制与智能回放完整指南
【免费下载链接】AutoHotkeyAutoHotkey - macro-creation and automation-oriented scripting utility for Windows.项目地址: https://gitcode.com/gh_mirrors/au/AutoHotkey
AutoHotkey 是 Windows 上的鼠标自动化与宏创建脚本工具,本文带你用不到十行代码完成鼠标移动、点击、操作录制与智能回放。你会看到它如何在重复录入、复杂流程与游戏宏三类场景里替你省下大量机械点击。
场景篇:鼠标自动化能替你做哪 3 件事
先别急着写代码,看看你每天被哪些重复动作耗掉时间。
- 重复数据录入:订单、工单、表单里同样的坐标点十几遍。把它录成一段轨迹,回放时一次都不用再伸手。
- 复杂软件操作:跨窗口拖拽、多级菜单、固定顺序的按钮组合。人工做一遍要几十秒,脚本可以稳定复现且不出错。
- 游戏宏指令:连续点击、固定节奏的走位与攻击。用脚本按你录好的节奏执行,手不用一直悬在鼠标上。
这三类的共同点是:动作固定、坐标确定、次数多。只要符合这个特征,就值得交给自动化。接下来我们先用最短的路径跑通第一次「移动+点击」。
快速上手:从准备环境到第一次「移动+点击」
先把仓库拉到本地并编译。命令行执行下面这一条,然后按工程文件生成可执行文件即可。
git clone https://gitcode.com/gh_mirrors/au/AutoHotkey编译完成后,新建一个.ahk脚本,写两行就能验证鼠标控制是否生效。下面的代码把光标挪到屏幕坐标 (500, 300),再在该位置做两次左键单击,移动耗时约 10 个单位的平滑度:
MouseMove 500, 300, 10 MouseClick Left, 500, 300, 2保存后按Ctrl+S让脚本生效,光标就会飞过去并双击。移动与点击这两个动作的底层实现在 source/keyboard_mouse.cpp 里,MouseMove负责带速度的平滑位移,MouseClick负责左/右/中键的单、双击以及按住和释放。跑通这两行,你就有了整套自动化的最小积木。
录制与回放:三步录下鼠标轨迹并自动重放
没有现成的图形录制器,不代表不能录。核心思路很简单:一边循环读取当前坐标和系统毫秒时间戳,一边把它们写进文本文件;回放时再按读到的间隔还原。整个过程可以拆成三步。
- 采集:用
MouseGetPos取当前 (x, y),配合A_TickCount记录时间,写入log.txt,每 50 毫秒采样一次,节奏足够还原大多数手动操作。 - 回放:读回文件,逐行取出 x、y、时间戳,调用
MouseMove移动,再用Sleep补足相邻两帧的时间差,模拟真实手速。 - 调参:回放时可以整体压缩或拉长间隔,也能用外层
Loop把整段轨迹重复 N 遍,一次录制反复利用。
采集端的循环长这样,四行就够用:
Loop { MouseGetPos x, y FileAppend %x% %y% %A_TickCount%`n, log.txt Sleep 50 }回放端不必再写死坐标,直接解析这份日志即可。想把速度调快,就在计算时间差时乘一个系数,比如 0.5 相当于两倍速;想循环播放,外层再套一层Loop, 5。这样「操作录制」就变成了你手里可随时加减速、可重复的「智能回放」。
发送模式怎么选:SendInput / SendPlay / SendEvent 对比
同一套动作,系统里有三种投递通道,速度、可靠性、适用面各不相同。先看一张对照表,再讲怎么选:
| 模式 | 速度 | 可靠性 | 适用场景 |
|---|---|---|---|
| SendInput | 最快 | 高,长文本下 CPU 负载也稳 | 默认首选,日常自动化 |
| SendPlay | 较慢 | 依赖钩子回放,真实感强 | 游戏、个别拒收 SendInput 的程序 |
| SendEvent | 较慢 | 兼容性最好 | 老旧软件、特殊环境兜底 |
代码层面,三者对应 source/defines.h 里的SM_INPUT、SM_PLAY、SM_EVENT三种枚举,脚本默认走的是SendInput。判断逻辑也写在 source/keyboard_mouse.cpp 中:系统没有额外钩子时就优先用SendInput,一旦检测到冲突会自动退化,避免卡死。
怎么选其实是一句话的事:默认用 SendInput,又快又稳;当目标程序「吞」了你的输入、或者明确是游戏时,再切到 SendPlay 换更真实的通道;实在不兼容的老软件,用 SendEvent 兜底。切换只需一条命令,随时改:
SendMode Input把Input换成Play或Event即可。记住,多数场景你并不需要换,先跑默认值。
进阶增强:热键触发、按窗口执行、封装函数
基础动作跑通后,三个增强点能让脚本从「能用」变成「好用」。
- 热键触发回放:给整段回放绑一个快捷键,按一下就自动执行,省去手动跑脚本。下面的
^!r::表示按Ctrl+Alt+R触发,逻辑就落在 source/hotkey.cpp 的热键处理里:
^!r:: ; 在这里调用回放函数 return- 按窗口条件执行:用
#IfWinActive ahk_exe notepad.exe把动作限定在记事本窗口激活时才生效,窗口名匹配(含ahk_exe)的实现见 source/window.cpp。这样脚本就不会在你切到别的程序时乱点。 - 封装成函数:把「移动到某点 + 点击」这类重复组合写进一个函数,调用时只传坐标。参数多了也好维护,改一处全体生效。
三者组合起来,你的脚本就能做到:按一个热键、在正确窗口、按封装好的节奏,精准地重放一整套鼠标动作。
避坑指南:被检测、定位偏差、速度慢怎么解
Q:脚本在游戏或安全软件里不生效,怎么办?A:先切到SendPlay换一条更真实的通道;需要独占桌面时,用BlockInput On在动作开始前屏蔽真实输入,结束后BlockInput Off恢复。这块开关的状态由 source/globaldata.cpp 里的g_BlockInput、g_BlockMouseMove等全局变量统一管理,g_BlockMouseMove专门控制是否拦截物理鼠标移动。
Q:鼠标落点和预期对不上?A:多半是坐标系没对齐。先确认用的是屏幕绝对坐标,必要时改用MouseMove的相对模式做小范围校准;多显示器时注意主屏与副屏的坐标原点不同,别把负坐标当成 bug。
Q:整段回放太慢?A:先砍掉多余的Sleep,把能并的动作合并;再确认用的是SendInput,它在大批量输入时明显快于另两种模式。把采样间隔和帧间延迟一起压缩,通常能省下一大半等待时间。
现在就动手
别再让重复点击耗你的时间。下一步建议:挑一个你今天就要做三遍以上的固定操作,按上面三步法录一份日志,先以 0.5 倍速回放验证坐标,再挂个Ctrl+Alt+R热键让它一键重放。跑通第一个,你就有了自己的第一支鼠标宏脚本。
【免费下载链接】AutoHotkeyAutoHotkey - macro-creation and automation-oriented scripting utility for Windows.项目地址: https://gitcode.com/gh_mirrors/au/AutoHotkey
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考