前言
AutoHotkey(简称 AHK)是一款免费、开源的 Windows 自动化脚本语言,主要用于创建热键(快捷键)、热字符串(自动替换文本)、自动化任务以及 GUI(图形用户界面)应用程序。
语法
热键
1 | ; 按 Ctrl + J 发送 "Hello" |
辅助键
#= Win 键!= Alt^= Ctrl+= Shift
ToolTip
显示提示
1 | ToolTip, 开始执行, , , 2 |
清除提示
1 | ToolTip ; 清除提示 |
延迟
1 | Sleep, 800 |
代码块
代码块有两种方式
- 标签
- 函数
标签
子程序中可以直接修改全局变量。
基本示例
1 | ; 技能 1: |
单次调用
子程序调用
1 | Gosub, CastSkill1 |
循环调用
1 | SetTimer, CastSkill1, 5000 |
停止
1 | SetTimer, CastSkill1, Off |
函数
函数默认都是局部变量,要修改全局变量要添加global关键字。
基本示例
定义及调用
1 | counter := 0 |
局部变量与全局变量
1 | ; 推荐格式 |
循环调用
SetTimer 只能调用标签,调用函数会报错。
判断窗口是否激活
窗口没有激活判断
1 | IfWinNotActive, ahk_class Diablo IV Main Window Class |
注意
{一定要换行,否则会报错。
按键监听
监听并屏蔽原功能
1 | $F2:: |
注意
$F2::和F2::的主要区别在于 是否防止热键触发自身的递归(即“避免自我触发”)。
比如
危险
1 | F2::Send, {F2} ; 按下 F2 后发送 F2 → 再次触发 F2 → 无限循环! |
安全
1 | $F2::Send, {F2} ; 按下 F2 后发送 F2,但不会再次触发此热键 |
只监听不屏蔽原功能
在 AutoHotkey v1 中,~Tab:: 的含义是:
监听
Tab键的按下事件,但不阻止系统/应用程序接收到这个按键。
多个按键监听
1 | ~B:: |
进阶
在 AutoHotkey v1 中,~*LButton:: 是一个热键定义,其中包含了两个特殊前缀符号:~ 和 *。
示例
1 | ~*LButton:: |
综合含义
无论是否按住 Ctrl/Alt/Shift/Win,只要点击鼠标左键,就执行这段代码,同时保留左键的原始功能(如点击、拖拽、选择等)。
含义
它们的组合具有特定含义:
LButton
- 表示 鼠标左键(Left Mouse Button)。
- 是 AHK 中代表鼠标按键的标准名称。
~(波浪号)
含义:透传(Pass-through)
效果:不屏蔽原始鼠标点击行为
即:你的脚本会执行自定义动作,同时系统和应用程序仍会正常收到“左键按下”事件。
*(星号)
含义:无视修饰键(Ignore modifier keys)
效果:无论是否按着热键就会触发。
- 普通写法
LButton::只在 没有任何修饰键按下时 才触发。 - 加了
*后,Ctrl+LButton、Shift+LButton等也会触发同一个热键。
- 普通写法
对比示例
| 写法 | 触发条件 | 是否屏蔽左键原始功能 |
|---|---|---|
LButton:: |
仅纯左键点击 | ❌ 屏蔽 |
~LButton:: |
仅纯左键点击 | ✅ 不屏蔽 |
*LButton:: |
任意组合(如 Ctrl+左键) | ❌ 屏蔽 |
~*LButton:: |
任意组合 | ✅ 不屏蔽 |
点击事件
单击1
1 | Send {1} |
鼠标左键
1 | Click |
鼠标右键
1 | Click Right |
按键按下与抬起
1 | Send {a down} |
定时任务
开启定时任务
1 | SetTimer, CastSkill1, 5000 |
关闭定时任务
1 | SetTimer, CastSkill1, Off |
脚本示例
1 | ; =================================================================== |