把重复点击交给脚本:AutoHotkey 鼠标点击热键实战
每天在同一个 Excel 格子点几十次、每次都要"双击加右键"才能出结果?AutoHotkey 是个跑在 Windows 上的开源脚本工具,能把这类鼠标点击序列绑到一个热键上,按一下就全部执行完。
先判断值不值得:热键化的 3 个信号
不是所有操作都适合做成鼠标点击热键。满足下面三条越多,脚本越值得写:
- 操作高频:同一段点击动作每天重复多次,比如批量录入、反复刷新确认;
- 目标位置固定:按钮坐标长期不变(窗口位置别老拖动);
- 错点代价高:点错行会毁掉半天录入,手动反而容易出错。
项目代码在仓库里全都能看到:热键匹配逻辑在 source/hotkey.cpp,项目说明见 README.md,拿不准行为时直接翻源码最踏实。
场景一:Excel 批量录入,双击加右键一步到位
录入前总要先"双击选中整列再右键粘公式",来回点鼠标最费事。
; F3:双击选中后右键复制公式
F3::
Click 620, 240, 2
Click 620, 240, right
return
; F4:中键点击粘贴(Excel 特性)
F4::Click 620, 310, middle
白话解释:F3 按下去后,光标移到 (620, 240) 位置连点两下,紧接着在同一位置来一下右键;F4 则只执行一次中键点击。
验证方法:把光标故意停在别处再按 F3,看到光标"跳"到那个坐标并完成双击右键,说明坐标对了。
场景二:网页表单自动填写加提交
固定入口的登录页,每次都要点输入框、输账号、再点登录按钮。
; F5:点用户名框、输账号、点密码框、输密码、点登录
F5::
Click 320, 180
Send, yourname
Tab
Send, yourpass
Click 480, 420
return
白话解释:Click 320, 180 是光标跳过去点一下;Send 负责往当前输入框敲字;最后那次点击就是提交。
验证方法:按 F5 后观察光标是否按顺序点了三个位置;如果第一下没点进输入框,多半是坐标偏了,换 Window Spy 重新量。
场景三:让热键只在指定窗口生效
热键是全局的,F3 可能在你玩游戏或写文档时误触发。用 #IfWinActive 把作用域锁死:
; 仅记事本激活时,F6 = 双击选词后复制,且只在上午执行
#IfWinActive, ahk_class Notepad
F6::
if (A_Hour < 12) {
Click 260, 150, 2
Click 260, 150, right
}
return
#IfWinActive
白话解释:#IfWinActive, ahk_class Notepad 表示后面定义的热键只在 Notepad 类窗口激活时有效;块外的热键不受影响,窗口判定走的是 HotCriterionAllowsFiring 这套逻辑。
验证方法:激活记事本按 F6 有反应,切到浏览器再按就没有。
不生效时,按这 5 步排查
- 热键根本没定义:F9 运行
ListHotkeys查看热键列表,名字没出现就是脚本没加载成功(文件后缀、语法错误都会导致)。 - 热键被自己触发了:脚本里
Send了和热键相同的键会递归触发。用$前缀(如$F8::),让 AutoHotkey 忽略自己发出的按键。 - 坐标偏了:用 Window Spy 右键选坐标模式,点目标按钮拿到准确数字,别用屏幕截图肉眼估。
- 连续按几次后失灵:触发频率被限流了——全局默认每 2 秒最多放行 70 次热键,防的就是误触和循环。停几秒再按;确属高频场景可改
MaxHotkeysPerInterval。 - 窗口条件没命中:
#IfWinActive的匹配串和实际窗口标题/类名不一致,热键"沉默"。先用不带条件的版本确认脚本本身没问题,再逐字核对窗口名。
动手调参前,先看这 3 个默认值
这几个参数定义在 source/globaldata.cpp,改之前先知道出厂值:
| 参数 | 默认值 | 作用 |
|---|---|---|
g_HotkeyModifierTimeout | 50 | 修饰键松开后热键仍算有效的毫秒数,太快打字的人可适当调大 |
g_MaxThreadsPerHotkey | 1 | 单个热键允许同时运行的线程数,防止重复按下叠线程 |
g_MaxHotkeysPerInterval | 70 | 每 2000 毫秒内全局最多放行的热键次数,超过会弹警告 |
实际改配置时用 MaxThreadsPerHotkey、MaxHotkeysPerInterval、HotkeyModifierTimeout 这几条命令写进脚本即可。
跑通之后还能往哪走
- SendInput / ControlClick:换更精确的输入后端,直接点控件而不是点像素坐标;
- Menu:做一个小菜单配置界面,把常用点击目标做成可选列表;
- Loop + ImageSearch:坐标不再写死,每轮循环找图定位再点,窗口挪位置也不怕。
鼠标和键盘的模拟细节都在 source/keyboard_mouse.cpp 里,上面三条路线的代码都能在里面找到对应实现。热键跑起来之后,剩下的就是慢慢往自动化上靠了。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



