程序的使用

AutoHotkey 程序本身不做任何事情; 它需要一个脚本来告诉它该做什么. 脚本只是一个简单的以 .ahk 作为扩展名的文本文件, 其中包含了程序的指令, 像配置文件, 但功能更强大. 一个脚本可以执行一个动作然后退出, 但大多数脚本定义了一些热键, 当热键按下时, 热键后面跟着的一个或多个动作将会执行.

#z::Run https://autohotkey.com  ; Win+Z

^!n::  ; Ctrl+Alt+N
if WinExist("Untitled - Notepad")
    WinActivate
else
    Run Notepad
return

提示: 如果您的浏览器支持, 当你将鼠标悬停在代码块上面时, 您可以通过点击代码块右上角的 按钮来下载任何代码块(如上面的代码块) 作为脚本文件.

目录

创建脚本

有几种常见的方法来创建脚本文件:

如果文件包含非 ASCII 字符, 请确保将文件保存为带有 BOM(字节顺序标记) 的 UTF-8. 有关详情, 请参阅常见问题(FAQ).

有关如何编写脚本的详细信息, 请参阅脚本语言.

编辑脚本

要打开脚本进行编辑, 请右键单击脚本文件, 然后选择 Edit Script(编辑脚本). 如果脚本已经在运行, 您可以使用 Edit(编辑) 命令或右键单击脚本的托盘图标并选择 Edit This Script(编辑此脚本). 默认情况下, 这将打开记事本, 但可以通过写入注册表来更换编辑器, 如例子所示. 当然, 您可以先打开文本编辑器, 然后像打开其他任何文本文件一样打开脚本.

编辑脚本保存后, 您必须运行或 reload(重新加载) 脚本以使更改生效. 正在运行的脚本通常可以通过其托盘菜单重新加载.

运行脚本

安装了 AutoHotkey 后, 有几种运行脚本的方法:

大多数脚本只有在运行时才会起作用. 使用托盘菜单ExitApp 命令退出脚本. 当 Windows 关闭时, 脚本也被迫退出. 要将脚本配置为在用户登录后自动启动, 最简单的方法是在 Startup(启动) 文件夹中放置脚本文件的快捷方式.

脚本也可以编译; 即与 AutoHotkey 二进制文件结合在一起, 形成一个独立的可执行(.exe) 文件.

托盘图标

默认情况下, 每个脚本都将自己的图标添加到任务栏通知区域(通常称为托盘).

托盘图标通常看起来像这样:

green H icon 默认的托盘图标.
red H icon 脚本暂停.
green S icon 脚本挂起.
red S icon 脚本暂停挂起.

右键单击托盘图标以显示托盘菜单, 默认情况下具有以下选项:

默认情况下, 双击托盘图标显示脚本的主窗口.

Menu 命令可以用来自定义托盘图标和菜单.

#NoTrayIcon 指令可用于隐藏托盘图标.

主窗口

脚本的主窗口通常是隐藏的, 但可以通过托盘图标或下面列出的命令之一显示, 以获得对调试脚本有用的信息. View 菜单下的项目控制主窗口显示的内容:

已知问题: 当脚本显示消息框或其他对话框时, 菜单项下的键盘快捷键不起作用.

内置变量 A_ScriptHwnd 包含脚本主窗口的唯一 ID(HWND).

使用 WinClose(甚至从另一个脚本或其他程序) 关闭这个窗口会导致脚本退出, 但大多数其他方法只是隐藏窗口并保持脚本运行.

最小化主窗口会使其自动隐藏. 这样做是为了防止将所有拥有的窗口(如 GUI 窗口或某些对话框窗口) 自动最小化, 但也有隐藏主窗口任务栏按钮的效果. 要让主窗口正常最小化, 可以用 OnMessage() 覆盖默认的处理方式. 例如:

; 这样可以防止主窗口在最小化时隐藏:
OnMessage(0x0112, Func("PreventAutoMinimize")) ; WM_SYSCOMMAND = 0x0112
OnMessage(0x0005, Func("PreventAutoMinimize")) ; WM_SIZE = 0x0005
; 这样可以防止拥有的 GUI 窗口(但不包括对话框) 自动最小化:
OnMessage(0x0018, Func("PreventAutoMinimize"))

PreventAutoMinimize(wParam, lParam, uMsg, hwnd) {
    if (uMsg = 0x0112 && wParam = 0xF020 && hwnd = A_ScriptHwnd) { ; SC_MINIMIZE = 0xF020
        WinMinimize
        return 0 ; 防止主窗口隐藏.
    }
    if (uMsg = 0x0005 && wParam = 1 && hwnd = A_ScriptHwnd) ; SIZE_MINIMIZED = 1
        return 0 ; 防止主窗口隐藏.
    if (uMsg = 0x0018 && lParam = 1) ; SW_PARENTCLOSING = 1
        return 0 ; 防止最小化拥有的窗口.
}

主窗口标题

脚本主窗口的标题会被 #SingleInstanceReload 机制用来识别同一脚本的其他实例. 改变标题可以防止脚本被这样识别出来. 默认的标题取决于脚本的加载方式:

加载于标题表达式示例
.ahk 文件A_ScriptFullPath " - AutoHotkey v" A_AhkVersionE:\My Script.ahk - AutoHotkey v1.1.33.09
主要资源(编译的脚本)A_ScriptFullPathE:\My Script.exe
任何其他资源A_ScriptFullPath " - " A_LineFileE:\My AutoHotkey.exe - *BUILTIN-TOOL.AHK

下面的代码说明了如何由脚本本身决定默认的标题(但实际的标题可以用 WinGetTitle 来检索):

title := A_ScriptFullPath
if !A_IsCompiled
    title .= " - AutoHotkey v" A_AhkVersion
; 为了获得正确的结果, 必须由被执行的资源来计算,
; 而不是一个 #include(除非这个 #include 是由 Ahk2Exe 合并到脚本中的):
else if SubStr(A_LineFile, 1, 1) = "*" && A_LineFile != "*#1"
    title .= " - " A_LineFile

嵌入脚本[v1.1.34+]

通过使用 Ahk2Exe 编译器, 可以将脚本添加到 Win32(RCDATA) 资源嵌入到标准的 AutoHotkey .exe 文件中. 要添加其他脚本, 请参阅 AddResource 编译器指令.

嵌入的脚本可以在命令行中指定, 也可以使用 #Include 在资源名称后跟一个星号(*). 对于一个整数 ID, 资源名称必须是一个哈希符号(#), 后面是一个十进制数字.

程序可以自动从以下资源加载脚本代码, 如果存在于文件中:

IDSpecUsage
1*#1 这是一种从 .exe 文件创建编译脚本的方法. 该脚本是自动执行的, 大多数命令行开关会被传递给脚本, 而不是由程序解释. 外部脚本和可选的嵌入式脚本可以通过使用 /script 开关来执行.
2*#2 如果存在, 该脚本会在程序加载的任何脚本之前自动 "included", 以及在 /include 指定的任何文件之前.

当主脚本的源是一个嵌入式资源时, 程序以 "编译脚本" 模式运行, 但 A_AhkPath 总是包含当前可执行文件的路径(与 A_ScriptFullPath 相同). 对于 *#1 以外的资源, 资源指定符会包含在主窗口的标题中, 以支持 #SingleInstanceReload.

当从嵌入资源的代码中引用时, A_LineFile 包含一个星号(*) 后跟资源名称.

命令行用法

有关命令行用法, 请参阅向脚本传递命令行参数, 其中包括影响程序行为的命令行开关列表.

AutoHotkey.exe 的可移植性

运行任何的 .ahk 脚本所需要的只是 AutoHotkey.exe 文件(译者注: 当脚本引用了其他 ahk 文件或库文件时, 这些引用的文件也是需要的, 否则程序会报错).

[AHK_L 51+]: 重命名 AutoHotkey.exe 会同时改变它默认运行的脚本, 这是在没有安装 AutoHotkey 的计算机上运行脚本的一种可选方法. 例如, 在没有指定文件名时, 执行 MyScript.exe 会自动运行 MyScript.ahk, 但也能运行其他脚本.

安装选项

要静默安装 AutoHotkey 到默认目录(这与手动安装时显示的目录相同), 需要向安装程序传递 /S 参数. 例如:

AutoHotkey_1.1.34.03_setup.exe /S

使用参数 /D 可以指定默认目录外的其他目录作为安装目录(如果没有使用 /S, 那么这样可以改变在安装程序中显示的默认目录). 例如:

AutoHotkey_1.1.34.03_setup.exe /S /D=C:\Program Files\AutoHotkey

Version(版本): 如果之前已经安装了 AutoHotkey, 则安装程序会自动检测 AutoHotkey.exe 的构建并设置为默认构建. 否则, 根据操作系统是否为 64 位设置默认构建为 Unicode 32 位或 Unicode 64 位. 要覆盖 AutoHotkey.exe 的默认构建设置, 请使用下列的其中一个开关:

例如, 下面的命令会静默安装并设置 ANSI 32 位为默认的构建:

AutoHotkey_1.1.34.03_setup.exe /S /A32

Uninstall(卸载): 要静默卸载 AutoHotkey, 需要向 Installer.ahk 传递 /Uninstall 参数. 例如:

"C:\Program Files\AutoHotkey\AutoHotkey.exe" "C:\Program Files\AutoHotkey\Installer.ahk" /Uninstall

对于 1.1.08.00 以前的 AutoHotkey 版本, 请使用 uninst.exe /S. 例如:

"C:\Program Files\AutoHotkey\uninst.exe" /S

注意: Installer.ahk 需要管理员权限才能正常运行.

Extract(提取解压) [v1.1.09.04+]: 安装程序 GUI 的右下角有一个链接, 可以在不安装的情况下提取文件, 可以在命令行中使用 /E 开关来调用它. 例如:

AutoHotkey_1.1.34.03_setup.exe /D=F:\AutoHotkey /E

Reload(重启脚本) [v1.1.19.02+]: 在静默安装/卸载模式中, 运行中的脚本可能会自动关闭. 通过传递 /R 参数, 可自动用之前运行时对应的 EXE 版本重启脚本, 无需其他命令行参数. 安装器将尝试通过 资源管理器(Explorer) 启动脚本, 所以当 用户账户控制(UAC) 开启的情况下, 脚本不会以管理员权限运行.

任务栏按钮 [v1.1.08+]: 在 Windows 7 及更高版本, 默认情况下, 任务栏的多个按钮将会组合为一个或一组. 而 分隔任务栏按钮 选项可关闭这个特性, 其原理是通过注册每一个 AutoHotkey 可执行文件为宿主程序(IsHostApp).

[v1.1.24.02+]: 从命令行安装时, 设置 /IsHostApp/IsHostApp=1 开启这个选项, 而设置 /IsHostApp=0 则是关闭.

以 UI Access 运行 [v1.1.24.02+]

安装器界面上有个 "增加 'Run with UI Access'(以 UI Access 运行) 到上下文菜单" 选项. 这个上下文菜单选项提供解决通常会遇到的 UAC 的相关问题, 它可让脚本自动管理程序权限, 且无需以管理员权限运行. 安装器实现该功能的方法是:

对应安装之前就存在的 UIA 文件, 无论是否开启了 UI Access 选项, 安装器都会自动升级它们.

对于命令行安装方式, 指定 /uiAccess/uiAccess=1 来开启选项, 设为 /uiAccess=0 则是关闭. 如果系统的 UAC(用户账户控制) 为开启的且 UI Access 上下文选项在安装之前已经注册过时, 安装器将默认开启这个选项.

脚本可以以 UI access 方式运行其他的脚本, 只需要简单的 Run 对应的 UIA.exe 文件加上命令行参数即可.

已知限制:

更多详情, 请参考 Enable interaction with administrative programs 论坛存档贴