AutoHotkey 程序本身不做任何事情; 它需要一个脚本来告诉它该做什么. 脚本只是一个简单的以 .ahk
作为扩展名的文本文件, 其中包含了程序的指令, 像配置文件, 但功能更强大. 一个脚本可以执行一个动作然后退出, 但大多数脚本定义了一些热键, 当热键按下时, 热键后面跟着的一个或多个动作将会执行.
#z::Run https://autohotkey.com ; Win+Z ^!n:: ; Ctrl+Alt+N if WinExist("Untitled - Notepad") WinActivate else Run Notepad return
提示: 如果您的浏览器支持, 当你将鼠标悬停在代码块上面时, 您可以通过点击代码块右上角的 ↓ 按钮来下载任何代码块(如上面的代码块) 作为脚本文件.
有几种常见的方法来创建脚本文件:
.ahk
文件扩展名保存文件. 在某些系统上, 您可能需要将文件名用引号括起来, 以确保编辑器不会添加其他扩展名(例如 .txt).如果文件包含非 ASCII 字符, 请确保将文件保存为带有 BOM(字节顺序标记) 的 UTF-8. 有关详情, 请参阅常见问题(FAQ).
.ahk
扩展名可见时, 请不要删掉它).有关如何编写脚本的详细信息, 请参阅脚本语言.
要打开脚本进行编辑, 请右键单击脚本文件, 然后选择 Edit Script(编辑脚本). 如果脚本已经在运行, 您可以使用 Edit(编辑) 命令或右键单击脚本的托盘图标并选择 Edit This Script(编辑此脚本). 默认情况下, 这将打开记事本, 但可以通过写入注册表来更换编辑器, 如例子所示. 当然, 您可以先打开文本编辑器, 然后像打开其他任何文本文件一样打开脚本.
编辑脚本保存后, 您必须运行或 reload(重新加载) 脚本以使更改生效. 正在运行的脚本通常可以通过其托盘菜单重新加载.
安装了 AutoHotkey 后, 有几种运行脚本的方法:
大多数脚本只有在运行时才会起作用. 使用托盘菜单或 ExitApp 命令退出脚本. 当 Windows 关闭时, 脚本也被迫退出. 要将脚本配置为在用户登录后自动启动, 最简单的方法是在 Startup(启动) 文件夹中放置脚本文件的快捷方式.
脚本也可以编译; 即与 AutoHotkey 二进制文件结合在一起, 形成一个独立的可执行(.exe) 文件.
默认情况下, 每个脚本都将自己的图标添加到任务栏通知区域(通常称为托盘).
托盘图标通常看起来像这样:
默认的托盘图标. | |
脚本暂停. | |
脚本挂起. | |
脚本暂停和挂起. |
右键单击托盘图标以显示托盘菜单, 默认情况下具有以下选项:
默认情况下, 双击托盘图标显示脚本的主窗口.
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 ; 防止最小化拥有的窗口. }
脚本主窗口的标题会被 #SingleInstance 和 Reload 机制用来识别同一脚本的其他实例. 改变标题可以防止脚本被这样识别出来. 默认的标题取决于脚本的加载方式:
加载于 | 标题表达式 | 示例 |
---|---|---|
.ahk 文件 | A_ScriptFullPath " - AutoHotkey v" A_AhkVersion | E:\My Script.ahk - AutoHotkey v1.1.33.09 |
主要资源(编译的脚本) | A_ScriptFullPath | E:\My Script.exe |
任何其他资源 | A_ScriptFullPath " - " A_LineFile | E:\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
通过使用 Ahk2Exe 编译器, 可以将脚本添加到 Win32(RCDATA) 资源嵌入到标准的 AutoHotkey .exe 文件中. 要添加其他脚本, 请参阅 AddResource 编译器指令.
嵌入的脚本可以在命令行中指定, 也可以使用 #Include 在资源名称后跟一个星号(*). 对于一个整数 ID, 资源名称必须是一个哈希符号(#), 后面是一个十进制数字.
程序可以自动从以下资源加载脚本代码, 如果存在于文件中:
ID | Spec | Usage |
---|---|---|
1 | *#1 | 这是一种从 .exe 文件创建编译脚本的方法. 该脚本是自动执行的, 大多数命令行开关会被传递给脚本, 而不是由程序解释. 外部脚本和可选的嵌入式脚本可以通过使用 /script 开关来执行. |
2 | *#2 | 如果存在, 该脚本会在程序加载的任何脚本之前自动 "included", 以及在 /include 指定的任何文件之前. |
当主脚本的源是一个嵌入式资源时, 程序以 "编译脚本" 模式运行, 但 A_AhkPath 总是包含当前可执行文件的路径(与 A_ScriptFullPath 相同). 对于 *#1 以外的资源, 资源指定符会包含在主窗口的标题中, 以支持 #SingleInstance 和 Reload.
当从嵌入资源的代码中引用时, A_LineFile 包含一个星号(*) 后跟资源名称.
有关命令行用法, 请参阅向脚本传递命令行参数, 其中包括影响程序行为的命令行开关列表.
运行任何的 .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 的默认构建设置, 请使用下列的其中一个开关:
/A32
或 /ANSI
: ANSI 32 位./U64
或 /x64
: Unicode 64 位(仅在 64 位系统中有效)./U32
: Unicode 32 位.例如, 下面的命令会静默安装并设置 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
则是关闭.
安装器界面上有个 "增加 'Run with UI Access'(以 UI Access 运行) 到上下文菜单" 选项. 这个上下文菜单选项提供解决通常会遇到的 UAC 的相关问题, 它可让脚本自动管理程序权限, 且无需以管理员权限运行. 安装器实现该功能的方法是:
对应安装之前就存在的 UIA 文件, 无论是否开启了 UI Access 选项, 安装器都会自动升级它们.
对于命令行安装方式, 指定 /uiAccess
或 /uiAccess=1
来开启选项, 设为 /uiAccess=0
则是关闭. 如果系统的 UAC(用户账户控制) 为开启的且 UI Access 上下文选项在安装之前已经注册过时, 安装器将默认开启这个选项.
脚本可以以 UI access 方式运行其他的脚本, 只需要简单的 Run 对应的 UIA.exe 文件加上命令行参数即可.
已知限制:
ComObjActive("Word.Application")
将会失败, 因为 Word 并不是一个 UI Access 标记的程序.#InstallMouseHook
指令), 鼠标热键会在由 UIA 脚本创建的窗口中失效, 即使热键为 "UIA 脚本" 自身定义的. 可行的解决办法是: 确保 "UIA 脚本" 最后一个加载.更多详情, 请参考 Enable interaction with administrative programs 论坛存档贴