1. 安装和运行第一个脚本
按照官方入门教程:
- 打开 AutoHotkey 官网。
- 点击 Download ,选择 v2,下载并安装。
- 桌面右键,选择"新建 → AutoHotkey Script"。
- 命名为
入门.ahk,右键选择编辑。 - 写入下面的代码,保存后双击运行。 autohotkey.com
AutoHotkey
#Requires AutoHotkey v2.0 ; 使用 v2 运行。
F8:: { ; 按 F8 时,执行下面大括号中的代码。
MsgBox "你好,脚本运行成功!" ; 显示一个提示窗口。
} ; F8 对应的动作到这里结束。
F10::ExitApp() ; 按 F10,退出整个脚本。
测试:按 F8 应出现弹窗,按 F10 退出。 :: 用来定义快捷键,MsgBox 显示消息,ExitApp 退出脚本。 autohotkey.com, autohotkey.com
建议每次只运行一个练习脚本,避免多个脚本都使用 F8。
2. 先认识这几个符号
| 写法 | 含义 |
|---|---|
F8:: |
定义 F8 快捷键 |
{ ... } |
把多条代码组成一个代码块 |
; 注释 |
解释代码,不作为动作执行 |
"文字" |
字符串,也就是文本 |
:= |
给变量赋值 |
^ |
快捷键中的 Ctrl |
! |
快捷键中的 Alt |
+ |
快捷键中的 Shift |
# |
快捷键中的 Win |
快捷键符号、代码块和注释写法见官方入门教程;变量赋值使用 :=。 autohotkey.com, autohotkey.com
例如:
arduino
^j::MsgBox "你按了 Ctrl + J" ; ^ 表示 Ctrl。
!j::MsgBox "你按了 Alt + J" ; ! 表示 Alt。
+j::MsgBox "你按了 Shift + J" ; + 表示 Shift
注意:#Requires 中的 # 是指令的一部分,不是 Win 快捷键。
3. 模拟输入文字和按键
SendText 用于发送普通文字;Send 用于发送按键,特殊键名称需要放在大括号中。它们默认发送到当前激活的窗口 。 autohotkey.com
建议先在一个空白记事本里测试:
ini
#Requires AutoHotkey v2.0 ; 使用 v2。
F8:: { ; 按 F8 执行。
SendText "这是第一行" ; 输入普通文字。
Send "{Enter}" ; 模拟按一次回车。
SendText "这是第二行" ; 输入第二行文字。
} ; 结束快捷键动作。
F10::ExitApp() ; 退出脚本。
rust
常见按键写法:
Send "{Enter}" ; 按回车。
Send "{Escape}" ; 按 Esc。
Send "{Space}" ; 按空格。
Send "{Tab}" ; 按 Tab。
Send "{Up}" ; 按上方向键。
Send "{Down}" ; 按下方向键。
Send "^c" ; 按 Ctrl + C。
Send "^v" ; 按 Ctrl + V。
以上特殊键和组合键语法均由 Send 支持。 autohotkey.com
最容易混淆的地方:
rust
Send "Enter" ; 输入字母 Enter,不是按回车。
Send "{Enter}" ; 这才是按回车。
4. 等待:让操作不要挤在一起
Sleep 表示等待,单位是毫秒,Sleep 1000 表示等待约 1 秒。实际等待可能受系统调度影响,不是精确计时。 autohotkey.com
ini
F8:: { ; 按 F8 执行。
SendText "开始" ; 输入开始。
Sleep 1000 ; 等待约 1 秒。
Send "{Enter}" ; 换行。
SendText "结束" ; 输
对应你的游戏,可以把操作理解为:
按确认 → 等菜单出现 → 再按确认
我的建议:先把等待时间设得宽松一些,确认流程正确后再缩短。
5. 点按和长按不是一回事
down 表示按下但不释放,up 表示释放。必须成对使用,才能明确控制长按。 autohotkey.com
下面是长按右方向键的示例,不要在有重要内容的窗口中测试:
ini
F8:: { ; 按 F8 执行。
SendEvent "{Right down}" ; 按下右方向键。
Sleep 1000 ; 保持约 1 秒。
SendEvent "{Right up}" ; 松开右方向键。
} ; 结束动作。
在游戏中,它可以作为"向右移动一段时间"的操作基础,但实际是否响应、移动多远,需要在你的游戏里测试。
不要在长按尚未释放时直接退出脚本。前面的长脚本用
finally处理正常停止时的按键释放,但ExitApp不会执行finally,因此 F10 不能等同于安全停止。 autohotkey.com
6. 变量:把参数放进一个有名字的盒子
变量用来保存数字、文字或状态。赋值用 :=,比较是否相等用 =。 autohotkey.com
ini
F8:: { ; 按 F8 执行。
waitMs := 1000 ; 创建变量,保存等待时间。
message := "等待完成" ; 创建变量,保存文字。
Sleep waitMs ; 使用变量中的 1000,等待约 1 秒。
MsgBox message ; 显示变量中的文字。
} ; 结束动作。
变量名不加引号,文字内容才加引号:
ini
MsgBox message ; 显示变量保存的内容。
MsgBox "message" ; 显示字母 message。
7. 条件判断:如果......就......
if 根据条件决定执行哪些代码,else 处理条件不成立的情况。 autohotkey.com, autohotkey.com
ini
F8:: { ; 按 F8 执行。
result := "success" ; 练习用的模拟结果,不是在识别游戏。
if result = "success" { ; 判断结果是否等于 success。
MsgBox "成功,停止重试" ; 条件成立时执行。
} else { ; 条件不成立时执行下面的代码。
MsgBox "失败,需要重试" ; 显示失败信息。
} ; 结束条件判断。
} ; 结束动作。
你可以把 "success" 改成 "fail",观察不同结果。
这里仅演示判断语法,不会自动知道游戏是否偷取成功。
8. 循环:重复执行动作
Loop 3 表示重复三次,A_Index 是当前循环序号,从 1 开始。break 可以提前结束循环。 autohotkey.com
ini
F8:: { ; 按 F8 执行。
Loop 3 { ; 重复下面的动作三次。
SendText "第 " A_Index " 次" ; 把文字和当前循环序号拼接后输入。
Send "{Enter}" ; 每次输入后换行。
Sleep 500 ; 每轮等待约半秒。
} ; 结束循环。
}
在空白记事本中测试,预期输入:
第 1 次
第 2 次
第 3 次
建议:新手先使用有限次数循环,不要一开始就写无限循环。
9. 函数:把重复动作打包
函数是一段可以重复调用的代码,可以接收参数。定义函数不会直接执行它,需要调用。 autohotkey.com
ini
PressKey(key) { ; 定义函数,key 接收要按的键名。
SendEvent "{" key "}" ; 拼出按键字符串,例如 {Enter}。
Sleep 500 ; 每次按键后等待约半秒。
} ; 结束函数定义。
F8:: { ; 按 F8 执行。
PressKey("Enter") ; 调用函数,按回车并等待。
PressKey("Down") ; 调用同一个函数,按下方向键并等待。
} ; 结束动作。
为什么有 global?
函数内修改外部全局变量时,需要明确声明它。 autohotkey.com
sql
Running := false ; 在函数外创建全局变量。
F8:: { ; 快捷键动作也具有函数作用域。
global Running ; 声明使用外部的 Running。
Running := true ; 修改外部变量。
MsgBox Running ; 显示 1,表示 true。
} ; 结束动作。
10. 综合练习:一个可以直接测试的小脚本
这是记事本练习 它把快捷键、变量、函数、循环和等待组合起来。
ini
#Requires AutoHotkey v2.0 ; 使用 v2。
F8::WriteLines() ; 按 F8,调用输入函数。
F9::Reload() ; 按 F9,重新加载脚本。
F10::ExitApp() ; 按 F10,退出脚本。
WriteLines() { ; 定义输入函数。
count := 3 ; 设置输入三行。
waitMs := 500 ; 设置每行之间等待约半秒。
Loop count { ; 按指定次数重复。
SendText "这是第 " A_Index " 行" ; 输入当前行的文字。
Send "{Enter}" ; 换行。
Sleep waitMs ; 等待后再输入下一行。
} ; 结束循环。
} ; 结束函数。
使用方法:
- 保存并运行脚本。
- 打开空白记事本,把光标放进去。
- 按 F8,检查是否输入三行。
- 修改
count := 3为count := 5,保存。 - 按 F9 重新加载,再按 F8 测试。
Reload() 会用新实例替换当前脚本,适合保存修改后重新加载;ExitApp() 则退出脚本。autohotkey.com, autohotkey.com