2026/11/4 11:09:53

AutoHotkey 鼠标自动化快速上手:录下第一组操作,再一键回放

AutoHotkey 鼠标自动化快速上手:录下第一组操作,再一键回放 AutoHotkey 鼠标自动化快速上手录下第一组操作再一键回放【免费下载链接】AutoHotkeyAutoHotkey - macro-creation and automation-oriented scripting utility for Windows.项目地址: https://gitcode.com/gh_mirrors/au/AutoHotkeyAutoHotkey 是一款面向 Windows 的免费开源自动化脚本工具。用它的鼠标自动化能力你可以把一段重复的鼠标操作录下来再按节奏回放省掉重复点击的力气——从表单录入到软件流程几十行脚本就能搞定。这篇文章带你在真实源码的基础上从零搭出录制 → 回放 → 热键触发的完整链路。两个命令先让鼠标动起来这一节解决最基本的问题怎么让鼠标按你的意思移动、点击。所有鼠标动作的原型都在 source/keyboard_mouse.cpp 里。你只需要记住三件事MouseMove, X, Y, Speed把光标移到 (X, Y)Speed 越大移动越慢0 表示瞬间到位。MouseClick, 按钮, X, Y, 次数默认左键单击一次次数填 2 就是双击按钮还能换成Right、Wheel等。MouseClickDrag按住鼠标键从起点拖到终点录制拖拽流程时用它。下面这段脚本把光标移到 (100, 200) 并双击MouseMove, 100, 200, 10 MouseClick, Left, 100, 200, 2, 10想按住不松或只松键时MouseClick还支持Down/Up选项组合起来就能模拟长按这类动作。三种发送模式怎么选鼠标点下去了事件怎么送进 WindowsAutoHotkey 提供三种送信方式用SendMode命令切换默认是 SendInput。这里的模式指模拟输入被系统接收的底层机制不同机制的速度和兼容性不同模式机制一句话适用场景SendInput直接向系统投递输入事件速度快绝大多数办公软件、日常自动化SendPlay通过回放钩子逐条重放更像真人逐次操作个别只认真实手感的程序但整体更慢SendEvent逐条发送并动态适应当时状态兼容性最强老旧软件、行为诡异的特殊环境源码里这三者对应枚举SM_INPUT/SM_PLAY/SM_EVENT定义在 source/defines.h。还有一个有意思的细节如果系统上存在其他钩子导致 SendInput 不可靠脚本会自动降级到SendEvent见 source/keyboard_mouse.cpp 中SendKeys的降级逻辑。选择原则日常先用默认的 SendInput遇到不听话的软件再依次试 SendPlay、SendEvent。切换后建议先小规模测试一轮再上正式流程。第一次录制操作把坐标和时间落进文件这一节带你写出最小可用的录制脚本思路只有一个记下每一步的坐标 发生时间。下面这个循环每 50 毫秒把光标位置和时间戳写进recording.txt按 Esc 停止Loop { MouseGetPos, x, y FileAppend, %A_TickCount% %x% %y%n, recording.txt Sleep, 50 } Esc::ExitAppA_TickCount是内置变量表示自系统启动以来的毫秒数拿它当秒表就够用了。MouseGetPos的实现可以在 source/script2.cpp 里找到。回放就是反过来做逐行读文件把光标移回记录的位置。下面这段在回放时还原了操作的节奏——相邻两条记录的时间差就是Sleep的时长FileRead, content, recording.txt Loop, Parse, content, n { StringSplit, p, A_LoopField, %A_Space% Sleep, p1 - LastTime LastTime : p1 MouseMove, p2, p3, 10 }这样录下的不是一堆坐标而是一段有快慢的操作录像。⏱️热键触发与窗口条件执行这一节解决两个体验问题怎么随时启动回放以及怎么避免热键到处乱触发。组合键启动^!r代表 CtrlAltR^Ctrl!Alt。把它绑成一个热键回放脚本随时待命。只在目标窗口生效#IfWinActive, 窗口标题声明之后的热键仅当该窗口处于激活状态时才响应再写一行不带参数的#IfWinActive即可取消限制。这段示例只在记事本激活时用 F1 触发回放#IfWinActive, ahk_exe notepad.exe F1:: Run, replay.ahk return #IfWinActive热键的解析与执行逻辑集中在 source/hotkey.cpp#IfWinActive一族的处理在 source/script2.cpp 中。封装、排错与提速最后集中处理三类最常被卡住的问题重复代码越写越长、动作被拦、跑得慢。重复操作封装成函数。移动 点击出现三次以上就该提成函数了ClickAt(x, y) { MouseMove, x, y, 10 MouseClick, Left, x, y } ClickAt(500, 300)点偏了。多显示器或 DPI 缩放时绝对坐标容易落点不准先确认窗口分辨率和缩放比例必要时用R选项改走相对坐标或者在点击前用WinActivate把目标窗口拉回已知位置。被游戏 / 安全软件拦截。⚠️ 换成SendMode Play试试或者执行期间用BlockInput On屏蔽真实输入结束后BlockInput Off恢复。但请注意游戏反作弊通常直接禁止一切模拟输入脚本不是万能钥匙。跑得慢。发送侧用 SendInput 比逐条 hook 快得多源码注释里就强调它明显更快回放循环里Sleep别给个位数毫秒否则 CPU 空转10~50 毫秒通常足够平滑。状态位方面g_BlockInput、g_BlockMouseMove等全局开关定义在 source/globaldata.cpp对应BlockInput命令的行为。源码对照速查鼠标核心命令与发送模式实现source/keyboard_mouse.cpp热键定义与执行source/hotkey.cpp输入阻塞与鼠标状态source/globaldata.cpp模式枚举定义source/defines.h下一步可以做什么把「录制 → 回放 → 热键触发」完整跑一遍录一段你自己每天的重复操作在回放循环里加一行条件判断如先检查目标窗口是否激活让回放变成智能回放用MouseClickDrag把拖拽类流程也纳入录制范围把常用鼠标组合封装成自己的小函数库之后所有脚本直接调用【免费下载链接】AutoHotkeyAutoHotkey - macro-creation and automation-oriented scripting utility for Windows.项目地址: https://gitcode.com/gh_mirrors/au/AutoHotkey创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考