如何编写自动热键脚本

AutoHotkey是一款奇妙但复杂的软件。它最初的目的是将自定义热键重新绑定到不同的操作,但现在是一个完整的Windows自动化套件。

AHK对于新用户来说并不是特别难学,因为总体概念相当简单,但它是一种完整的、图灵完整的编程语言。如果你有编程背景或熟悉这些概念,你会更容易学会语法。

安装和使用自动热键

AutoHotkey的安装过程非常简单。从官网下载安装程序并运行。选择“快速安装”。安装软件后,您可以右键单击任意位置,然后选择新建>自动热键脚本来创建新脚本。

AHK脚本是扩展名为.ahk的文本文件。如果右键单击它们,您将获得以下几个选项:

“运行脚本”将使用AHK运行时加载您的脚本。 “编译脚本”会将其与AHK可执行文件捆绑在一起,以生成您可以运行的EXE文件。 “编辑脚本”将在默认文本编辑器中打开您的脚本。您可以使用记事本编写AHK脚本,但我们推荐使用SciTE4AutoHotkey,这是AHK的一个编辑器,支持语法突出显示和调试。

当脚本正在运行时-无论它是不是EXE-您会在Windows通知区域(也称为系统托盘)中发现它在后台运行。查找上面有“H”的绿色图标。

要退出、暂停、重新加载或编辑脚本,请右键单击通知图标并选择适当的选项。脚本将继续在后台运行,直到您退出。当然,当您注销Windows或重新启动PC时,它们也会消失。

自动热键是如何工作的?

在其核心,AHK做一件事-将动作绑定到热键。有很多不同的动作、热键组合和控制结构,但所有脚本都将按照相同的原则操作。以下是一个基本的AHK脚本,它会在您按Windows+C组合键时启动Google Chrome:

#c:: Run Chrome return

第一行定义一个热键。井号(#)是Windows键的缩写,c是键盘上的C键。在此之后,有一个双冒号(::)表示动作块的开始。

下一行是一个操作。在本例中,该操作使用run命令启动一个应用程序。块结束时在末尾有一个回车键。在返回之前,你可以有任意数量的动作。它们都会按顺序发射。

就像这样,您已经定义了一个简单的键到操作的映射。您可以将任意数量的热键放在.ahk文件中,并将其设置为在后台运行,始终寻找要重新映射的热键。

热键和修改器

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

所有修改键都有单字符速记。例如,#!^+分别是Windows、Alt、Control和Shift。还可以使用<and>修饰符区分左右Alt、Control和Shift,这为额外的热键提供了很大的空间。例如,<!是左Alt,>+是右移位。看看关键字列表,看看你能参考的一切。(剧透:几乎每个键都可以引用。您甚至可以引用具有小扩展名的其他非键盘输入设备)。

您可以将任意多个键组合到一个热键中,但是您很快就会用完要记住的键组合。这就是修饰符的用武之地,它让你做更疯狂的事情。让我们来分析一下AHK文档中的一个例子:

绿色的#IfWinActive被称为指令,并将额外的上下文应用于脚本中它物理上位于它下面的热键。它之后的任何热键只有在条件为真时才会触发,并且您可以在一个指令下对多个热键进行分组。这个指令在你点击另一个指令之前是不会改变的,但是你可以用一个空白的#if重置它(如果这看起来像是黑客攻击,欢迎来到AHK)。

这里的指令是检查是否打开了由ahk_class记事本定义的特定窗口。AHK收到输入“Win+C”后,只有在指令返回TRUE的情况下,才会触发第一个#IfWinActive指令下的动作,如果没有返回TRUE,则检查第二个指令,AHK有很多指令,都可以在文档中找到。

AutoHotkey也有热串,除了替换整个文本字符串之外,它的功能与热键类似。这类似于自动更正的工作方式-事实上,有一个用于AHK的自动更正脚本-但支持任何AHK操作。

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

行为

AHK中的操作是任何对操作系统有外部影响的操作。AHK有很多活动。我们不可能全部解释,所以我们会挑出一些有用的。

发送输入,无论是文本还是各种按钮按下。 移动鼠标。事实上,AHK有时会被错误地标记为视频游戏的作弊软件,因为人们已经用它制作了功能齐全的目标机器人。 单击鼠标,并相对于当前窗口定位。 显示对话框菜单,包括表单和输入字段。 移动窗口、调整大小以及打开和关闭。 放音乐。 正在写入Windows注册表。是的,真的。 修改剪贴板的内容。 读取和写入文件。您可以遍历文件并对每行运行操作。AHK甚至可以写入.ahk文件并调整自己的代码。

这些操作中的大多数还将具有与其相关联的面向信息的命令。例如,您可以写入剪贴板,但也可以获取剪贴板的内容以存储在变量中,并在剪贴板更改时运行函数。

使用控制结构将其全部捆绑在一起

如果没有所有使其图灵完整的控制结构,AHK就不会是今天的样子。

除了#if指令之外,您还可以在动作块中访问if。AHK有for循环、大括号块、try语句和catch语句,以及许多其他语句。您可以从动作块内访问外部数据,并将其存储在变量或对象中,以便稍后使用。您可以定义自定义函数和标签。真的,任何你可以用另一种编程语言很容易做的事情,你可能都可以在AHK中做得有点头疼,然后看一下文档。

例如,假设您有一项枯燥、重复的任务,需要您连续单击多个按钮,并等待服务器响应,然后无限地重新执行。您可以使用AHK自动执行此操作。如果您希望定义几个循环来将鼠标移动到特定位置,请单击,然后移动到下一个地点并再次单击。添加几个等待语句以使其不会中断。您甚至可以尝试读取屏幕上像素的颜色来确定发生了什么。

有一件事是肯定的-您的脚本可能不会很漂亮。但AutoHotkey也不是,这没关系。