AutoHotkey v2 零基础快速入门 Part 1

1. 安装和运行第一个脚本

按照官方入门教程:

  1. 打开 AutoHotkey 官网。
  2. 点击 Download ,选择 v2,下载并安装。
  3. 桌面右键,选择"新建 → AutoHotkey Script"。
  4. 命名为 入门.ahk,右键选择编辑。
  5. 写入下面的代码,保存后双击运行。 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 ; 等待后再输入下一行。

    } ; 结束循环。

} ; 结束函数。

使用方法:

  1. 保存并运行脚本。
  2. 打开空白记事本,把光标放进去。
  3. 按 F8,检查是否输入三行。
  4. 修改 count := 3 为 count := 5,保存。
  5. 按 F9 重新加载,再按 F8 测试。

Reload() 会用新实例替换当前脚本,适合保存修改后重新加载;ExitApp() 则退出脚本。autohotkey.com, autohotkey.com

相关推荐
huaweichenai1 小时前
spring boot实现base64上传
java·spring boot·后端
点纭1 小时前
spring ai1.0实战:ChatClient(2)
java·后端·spring
yunwei371 小时前
eBPF 实例教程:BPF Arena 零拷贝共享内存
linux·后端·性能优化
geovindu2 小时前
rust: pool Pattern
开发语言·后端·设计模式·rust·对象池简写模式
Rain的Java大神之路2 小时前
Java 工程师做 AI,核心机会在「落地」而非「训练」
java·后端·ai编程
柠檬味拥抱2 小时前
基于 YOLO11 的六类生活垃圾视觉分类系统 | 用于社区投放点智能督导、分拣线品类分流、投错率统计分析 | 附完整源码与效果演示
后端
程序员小新7002 小时前
RAG 实战与踩坑:交通法规智能问答助手
人工智能·后端
拖孩2 小时前
AI 时代,个人开发者到底能不能靠一个小程序赚到钱
前端·后端·微信小程序
EAIReport2 小时前
SpringBoot 与 SpringCloud 深度解析:核心特点、差异与协同关系
spring boot·后端·spring cloud