AutoHotkey v2快速入门

AutoHotkey v2 快速入门与新版变化


一、AutoHotkey 是什么?

AutoHotkey(简称 AHK)是一个轻量脚本语言,常用于:

  • 快捷键映射(热键)
  • 自动化操作(如自动输入、自动点击)
  • 界面自动化(GUI)
  • 文本替换(热字串)
  • 小工具开发

v2 是一次 语法完全重写的重大升级,比 v1 更规范、更现代,避免了 v1 的大量“坑点”。


二、v2 的重大变化总览(与 v1 最大不同点)

1. 命令 → 统一改为函数

v1 的命令式语法:

MsgBox, Hello
StringSplit, arr, text, `,
  • 参数用逗号分隔
  • 空格也可能是参数(极混乱)
  • 函数与命令混杂在一起

v2 全改成 函数风格

MsgBox("Hello")
arr := StrSplit(text, ",")

重要变化:v2 抛弃命令式语法 → 全部函数化。v2 命令被取消,只有函数。

2. 全部需要使用 := 赋值

v1 可以写:

a = 123

v2 只有表达式赋值:

a := 123

3. 不再隐式全局变量

v1 内部函数可随意读写外层变量,这是 bug 源泉。

v2 不再默认“全局变量",要写明:

global count := 0

add() {
    global count
    count += 1
}

v2 中必须声明:global count,v1 中:函数可以随便修改函数外的变量(极危险)

4. 所有内置函数名、内置变量名都规范化

例如:

  • SubStr()SubStr()(保留,但参数规则变了)
  • StrLen()统一变为 StrLen()
  • KeysClipboardA_...变量 都大多保持,但行为更一致

5. GUI 系统完全重写

v2 的 GUI 更像现代语言:

gui := Gui()
gui.Add("Text",, "请输入:")
edit := gui.Add("Edit", "w200")
gui.Show()

6. 热键写法更标准

v1:

^a::
    MsgBox, Ctrl+A
return

v2:

^a:: MsgBox("Ctrl+A")

7. 异常(Error)机制彻底升级

函数错误会抛出异常:

try {
    FileRead("不存在.txt")
} catch e {
    MsgBox("错误:" e.Message)
}

三、AutoHotkey v2 必会语法(快速入门)


1. 变量与基本语句

变量赋值

name := "Alice"
count := 10
pi := 3.14

字符串拼接

v2 使用 表达式拼接

MsgBox("Hi " name ", count=" count)

2. 数组(Array)与对象(Object)

AutoHotkey v2 中 数组与对象本质上都是对象(Object),只是访问方式不同。

🟦 数组(从 1 开始计数)

arr := ["a", "b", "c"]
MsgBox(arr[1])   ; a
arr.Push("d")

遍历:

for i, v in arr {
    MsgBox(i ": " v)
}

🟩 对象(键值对)

person := {name: "Tom", age: 20}
MsgBox(person.name)

添加/修改:

person.city := "Shanghai"

🟧 嵌套对象(配置/结构体)

cfg := {win: {w: 800, h: 600}}
MsgBox(cfg.win.w)

🟨 字典用法(键 → 值)

price := {}
price["apple"] := 3
MsgBox(price["apple"])

3. 条件判断 逻辑控制(Script)

if count > 5 {
    MsgBox("大于 5")
} else {
    MsgBox("小于等于 5")
}

4. 循环

for i, v in arr {
    MsgBox("第 " i " 项:" v)
}

5. 函数定义(Functions)= 执行具体操作

v2 中所有动作都通过函数完成

sum(a, b) {
    return a + b
}

MsgBox(sum(3, 4))

6. 热键(Hotkey)= 快捷触发入口

热键本质上执行一个函数,只是这个函数没有名字
1、 单动作 → 单行
2、 多动作 → 大括号

最经典示例:Ctrl+Shift+T 弹窗

^+t:: MsgBox("你好 AutoHotkey v2")

运行程序

#n:: Run("notepad.exe")  ; Win+N

自动连点器例子(按 F8 开启 / F9 停止)

F8:: {
    global clickFlag := true
    while clickFlag {
        Click
        Sleep(50)
    }
}

F9:: clickFlag := false

多行必须是:

F6:: {
    Click
    Sleep(200)
}
  • F6 是“触发器”
  • { ... } 是“动作函数体”
  • 整个东西合在一起就是一个“热键绑定”

多行代码的“范围”由大括号明确标记,如需要写超过一条动作,就必须加 { }


7. 热字串(输入自动替换)

::btw::by the way
::gm::Good morning!

8. 自动点击示例

F6:: {
    MsgBox("开始点击")
    Loop 10 {
        Click
        Sleep(100)
    }
}

四、AutoHotkey v2 常用函数与示例


1. 窗口操作

WinActivate("无标题 - 记事本")
WinMinimize("Calculator")

2. 文件读写

text := FileRead("readme.txt")
FileAppend("追加内容`n", "log.txt")

3. 剪贴板

A_Clipboard := "Hello world"
MsgBox(A_Clipboard)

4. 正则

m := RegExMatch("abc123", "\d+", &out)
MsgBox("数字:" out[0])

五、AHK v2 最经典入门脚本(推荐从这里开始)


#SingleInstance Force

; ==== 基本热键 ====
^+t:: MsgBox("Hello AHK v2")  ; Ctrl+Shift+T

; ==== 打开常用软件 ====
#n:: Run("notepad.exe")       ; Win+N 记事本
#m:: Run("mspaint.exe")       ; Win+M 画图

; ==== 热字串 ====
::gm::Good morning!
::sig::Best Regards,`nAlice

; ==== 自动点击 ====
F6:: {
    Loop 20 {
        Click
        Sleep(50)
    }
}

; ==== 程序启动提示 ====
MsgBox("脚本已启动")