如何编写 AutoHotkey 脚本

自动热键 (AutoHotkey, 简称 AHK) 是一款功能强大且略显复杂的软件。它最初的设计目标是允许用户自定义热键并将其映射到不同的操作,但现在已经发展成为一个全面的 Windows 自动化工具包。

对于初次接触 AHK 的用户来说,入门难度并不算太高,因为其核心概念相对简单。然而,它本质上是一种功能完整的、具备图灵完备性的编程语言。如果您具备编程基础或者对相关概念有所了解,那么您将更容易掌握其语法规则。

安装和使用 AutoHotkey

安装 AutoHotkey 的过程非常简单。您只需从官方网站下载安装程序并运行。在安装过程中,选择“快速安装”即可。安装完成后,您可以通过右键单击任意位置,然后选择“新建”>“AutoHotkey 脚本”来创建新的脚本文件。

AHK 脚本实际上是以 .ahk 为扩展名的文本文件。右键单击这些文件,您会看到几个选项:

“运行脚本”会使用 AHK 运行时环境加载并执行您的脚本。
“编译脚本”会将脚本与 AHK 可执行文件捆绑在一起,生成一个可以直接运行的 EXE 文件。
“编辑脚本”会使用您默认的文本编辑器打开脚本。虽然您可以使用记事本编写 AHK 脚本,但我们建议使用 SciTE4AutoHotkey 编辑器,它提供了语法高亮和调试功能,能显著提升您的编程体验。

当脚本运行时(无论是以 .ahk 文件还是 EXE 文件的形式),您会在 Windows 通知区域(也称为系统托盘)中发现一个正在后台运行的程序图标。该图标通常是一个绿色的 “H” 字母。

要退出、暂停、重新加载或编辑脚本,您只需右键单击通知图标并选择相应的选项即可。脚本会持续在后台运行,直到您将其退出。当然,当您关闭 Windows 或重启电脑时,它们也会停止运行。

AutoHotkey 的工作原理

AHK 的核心功能是实现热键与特定动作的绑定。虽然存在各种不同的动作、热键组合和控制结构,但所有脚本都遵循相同的基本原理。下面是一个简单的 AHK 脚本示例,它会在您按下 Win + C 组合键时启动 Google Chrome 浏览器:

#c::
Run Chrome
return

第一行定义了一个热键。其中,井号 (#) 代表 Windows 键,c 代表键盘上的 C 键。双冒号 (::) 表示一个动作块的开始。

第二行是一个动作。在本例中,该动作使用 Run 命令来启动应用程序。最后一行使用 return 结束动作块。您可以在 return 之前执行任意数量的动作,这些动作会依次执行。

通过这样的方式,您就定义了一个简单的键到操作的映射。您可以在一个 .ahk 文件中编写任意数量的此类映射,并将其设置为在后台运行,持续监听热键的输入,从而实现重新映射的功能。

热键和修饰符

您可以在 官方文档中找到 AHK 修饰符的完整列表,但我们将重点介绍其中最实用(也最酷)的功能。

每个修饰键都有其单字符的快捷方式。例如,#、!、^ 和 + 分别代表 Windows 键、Alt 键、Control 键和 Shift 键。您还可以使用修饰符来区分左侧和右侧的 Alt、Control 和 Shift 键,这为设置更多的热键提供了可能性。例如,+ 代表右 Shift 键。您可以在 键列表 中查看所有可以参考的内容。(剧透:几乎每个键都可以参考。您甚至可以参考其他非键盘输入设备 扩展)。

您可以将任意数量的按键组合成一个热键,但您很快就会发现要记住的组合键数量不足。这时,修饰符就派上了用场,它可以让您实现更加复杂的操作。让我们分析一个 来自 AHK 文档的 例子:

绿色的 #IfWinActive 被称为指令,它为脚本中物理位置在其后的热键添加了上下文条件。只有当条件为真时,其后的热键才会触发。您可以将多个热键组合在一个指令下。在您点击另一个指令之前,该指令会持续有效,但您可以通过使用一个空的 #If 来重置它(如果您觉得这像是一种 hack,那么欢迎来到 AHK 的世界)。

这里的指令是检查一个特定的窗口是否打开,由 ahk_class 记事本定义。当 AHK 接收到 “Win+C” 的输入时,它只会在指令返回 true 时触发第一个 #IfWinActive 下的操作,如果没有,则检查第二个。AHK 提供了很多指令,您可以在 文档 中找到它们。

AutoHotkey 还提供了 热字串 功能,它除了可以替换整个文本字符串外,其工作方式类似于热键。这类似于自动更正的工作原理——事实上,AHK 有一个用于实现 自动更正的脚本——但它支持任何 AHK 操作。

热字串只会在准确输入时与字符串匹配。它还会自动删除匹配的文本以替换热字串,尽管可以调整此行为。

动作

AHK 中的动作是指对操作系统产生外部影响的任何操作。AHK 提供了大量的动作。我们不可能解释所有这些,所以我们将挑选一些有用的动作进行说明。

发送输入,包括文本和各种按键操作。
移动鼠标指针。事实上,AHK 有时被错误地认为是电子游戏的作弊软件,因为有人使用它制作了功能完善的瞄准机器人。
点击鼠标,相对于当前窗口定位。
显示对话框菜单,包含表单和输入字段。
移动窗口、调整大小、最大化和最小化。
播放音乐
写入 Windows 注册表。没错,它可以直接修改注册表。
修改剪贴板的内容
读取和写入文件。您可以遍历文件并在每一行上执行操作。AHK 甚至可以写入 .ahk 文件并修改自身的代码。

大多数这些动作也会有与之相关的信息获取命令。例如,您可以写入剪贴板,也可以获取剪贴板的内容并将其存储在变量中,并在剪贴板内容发生变化时执行函数。

使用控制结构将其组合在一起

如果没有所有的控制结构,AHK 就不会是现在的 图灵完备 语言。

除了 #If 指令之外,您还可以在动作块内使用 If 语句。AHK 提供了 For 循环、花括号 块、Try 和 Catch 语句以及许多其他语句。您可以从动作块访问外部数据,并将其存储在 变量对象 中以供以后使用。您还可以定义 自定义函数标签。实际上,您可以在另一种编程语言中轻松完成的任何事情,您都可以在 AHK 中完成,但可能需要花一些时间阅读文档和解决一些头痛的问题。

例如,假设您有一项重复且枯燥的任务,需要您连续单击多个按钮,并等待服务器响应,然后再无限次重复执行此操作。您可以使用 AHK 自动执行此操作。您需要定义几个循环来将鼠标移动到特定位置,单击,然后移动到下一个位置再次单击。在代码中添加一些等待语句,以避免程序崩溃。您甚至可以尝试使用 读取屏幕上像素的颜色 来判断发生了什么。

有一件事是肯定的——您的脚本可能不会很漂亮。但 AutoHotkey 也不是完美的,这没什么大不了的。