AutoHotkey 是 Windows 上的自动化脚本工具,一个 exe 加一个 .ahk 文本文件,就能把热键、窗口操作、键鼠模拟、字符串处理串起来。它在这个平台上活了二十年,很多小工具都是用它写的。
v2 版换了语法,比 v1 严格得多,好处是报错清楚。实测一个空脚本从启动到退出 155.7 毫秒,10 万次字符串拼接只花 15 毫秒——大头全在进程启动上。
一个 exe,脚本是纯文本
AutoHotkey64.exe script.ahk 直接跑
AutoHotkey64.exe /ErrorStdOut script.ahk 语法错误输出到 stderr
Release 页给的是 zip,解压出 AutoHotkey32.exe 和 AutoHotkey64.exe,各 1284608 字节左右,不带安装程序也不写注册表。/ErrorStdOut 这个开关很重要:不加它,语法错误会弹一个对话框等人点确定,脚本在自动化里就卡住了。
脚本第一行写 #Requires AutoHotkey v2.0,明确版本,避免在装了 v1 的机器上跑出奇怪的兼容错误。
启动 155.7 毫秒,脚本本身很快
| 任务 | 脚本内计时 | 含进程启动 |
|---|---|---|
| 空脚本启动到退出 | — | 155.7 毫秒 |
| 10 万次字符串拼接 | 15 毫秒 | 151 毫秒 |
| 100 万次整数累加 | 47 毫秒 | 189 毫秒 |
| 1 万次正则匹配 | 16 毫秒 | — |
| 定义 30 个热键 | — | 158.9 毫秒 |
| 对照:同机起一个 shell 进程 | — | 142.8 毫秒 |
空脚本 155.7 毫秒是 20 次平均,最快 144.1、最慢 179.9 毫秒。这个数字就是「起一个 AutoHotkey 进程」的底价,和同机起一个 cmd 进程的 142.8 毫秒是一个量级。
脚本本身的执行速度不慢:10 万次字符串拼接 15 毫秒,100 万次循环 47 毫秒。也就是说写一个处理几千行文本的脚本,跑起来的时间你根本感觉不到,感觉到的只有启动那 150 毫秒。
热键数量对启动影响很小:定义 30 个热键 158.9 毫秒,比空脚本只多 3 毫秒。热键是注册到系统的钩子,成本不随数量线性增长。
热键不能随便编号
F1::Send("x")
...
F25::Send("x") ← 这里开始失败
退出码 2
试过定义 100 个热键,F1 到 F100,直接失败退出(退出码 2)。原因是键盘上只有 F1 到 F24,F25 之后的键名不存在,v2 会在解析阶段就拒绝。改成 F1-F12 加 18 个组合键(^!a、^#b、!#c 这种),30 个热键正常注册,退出码 0。
组合键的写法:^ 是 Ctrl、! 是 Alt、# 是 Win、+ 是 Shift。^!a 就是 Ctrl+Alt+A。
语法错误会告诉你哪一行
> AutoHotkey64.exe /ErrorStdOut bad.ahk
bad.ahk (3) : ==> Missing operand.
Specifically: + )
退出码 2
报错格式是「文件名 (行号) : ==> 错误类型」,还会把出问题的那段代码片段印出来。上面这个例子是 if (1 + ) 少了一个操作数,它准确指到了第 3 行和 + ) 这两个 token。
v1 时代这类错误常常只说「某某行有错」,v2 的提示质量提升明显。配合 /ErrorStdOut,语法检查可以直接塞进 CI。
什么时候用它
想把重复的键鼠操作录成一个热键。这是它最经典的用法:写十几行脚本,绑一个组合键,以后一键完成。
想在 Windows 上做小工具。输入框、托盘图标、读写文件、发 HTTP 请求都能做,一个 exe 就能分发,不用带运行时。
需要跨平台。它是 Windows 专属,macOS 和 Linux 上没有对应实现。跨平台需求得看 Hammerspoon(macOS)或 AutoKey(Linux)。
要做复杂的并发或网络服务。它的强项是桌面自动化和单线程脚本,写网络服务用别的语言更合适。
还没测的两项:模拟键鼠的实际延迟(Send 到目标窗口响应)/ 编译成独立 exe 的体积。前者要逐帧录屏比对,后者需要单独的 Ahk2Exe 编译器,zip 包里没带。










