AutoHotKey
AutoHotKey
目录
入门
AutoHotKey介绍
这个软件也叫AHK,需要用脚本语言来写
- 官网V2 / 官网V1
- 官网文档(自身支持中文,主要参考)
- 官网论坛
- 【Github】AutoHotkey_L(主要分支)
- 软件安装后自带chm帮助手册,缺点是只支持英文,而网页版的支持中文
脚本
- 是个体积小巧,语法简单的语言
作用
- 随心所欲创建快捷键
- 也可以创建游戏脚本
使用流程
创建脚本
用记事本即可,文件扩展名为.ahk
编辑脚本
编辑技巧:AutoHotKey提供了右键菜单,编辑.ahk时右键单击脚本文件, 然后选择 Edit Script(编辑脚本) 即可在记事本中打开,
而无需在打开方式中选择记事本
运行脚本
安装了 AutoHotkey 后, 有几种运行脚本的方法:
- 双击资源管理器中的脚本文件(或脚本文件的快捷方式).
- 在命令行中调用 AutoHotkey.exe, 并将该脚本的文件名(路径) 作为命令行参数.
- 创建 the default script(默认脚本) 后, 通过 "开始" 菜单中的快捷方式启动 AutoHotkey 以运行它.
- 如果 AutoHotkey 固定在 Windows 7 或更高版本系统的任务栏或 "开始" 菜单上, 则可以通过程序跳转列表打开最近的或已固定的脚本.
大多数脚本只有在运行时才会起作用. 使用托盘菜单或 ExitApp 命令退出脚本. 当 Windows 关闭时, 脚本也被迫退出. 要将脚本配置为在用户登录后自动启动, 最简单的方法是在 Startup(启动) 文件夹中放置脚本文件的快捷方式.
脚本也可以编译; 即与 AutoHotkey 二进制文件结合在一起, 形成一个独立的可执行(.exe) 文件
部件
托盘图标
默认情况下, 每个脚本都将自己的图标添加到任务栏通知区域(通常称为托盘)
主窗口
最小化主窗口会使其自动隐藏. 这样做是为了防止将所有拥有的窗口(如 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 ; 防止最小化拥有的窗口.
}
安装和使用
嵌入脚本
脚本可以被嵌入到一个标准的 AutoHotkey .exe 文件中, 方法是将它们作为 Win32(RCDATA) 资源来添加
命令行用法
略
安装选项
略
快速入门
官网文档教程:https://wyagd001.github.io/zh-cn/docs/Tutorial.htm
热键 & 热字串
- 热键:是用来触发某些动作的按键或组合按键
热键是通过一对::
创建的。按键名或组合按键名必须在::
左边
^j::
Send, My First Script
Return
热字串:当你键入它们时, 热字串主要用于扩展缩写(自动替换)
热字串在要触发文本替换的文本两边各有一对冒号::
::ftw::Free the whales ::btw:: MsgBox You typed "btw". Return
这两个例子的区别在于, 当你按下
Ctrl+J
时, 热键将会触发, 而热字串会将你输入的 "ftw" 转换为 "Free the whales"
热键修饰符
表。详见:https://wyagd001.github.io/zh-cn/docs/Hotkeys.htm
符号 | 描述 |
---|---|
# | Win(Windows 徽标键) |
! | Alt |
^ | Ctrl |
+ | Shift |
& | 用于连接两个按键(含鼠标按键) 合并成一个自定义热键. |
< | 使用成对按键中左边的那个。例如 <!a 相当于 !a, 只是使用左边的 Alt 才可以触发 |
> | 使用成对按键中右边的那个 |
———— | ————————(下面的不常用)———————— |
<^>! | AltGr 键(标准键盘上没有该键) |
* | 通配符: 即使附加的修饰键被按住也能激发热键 |
~ | 触发热键时, 热键中按键原有的功能不会被屏蔽(对操作系统隐藏) |
$ | 通常只在脚本使用 Send 命令发送包含了热键自身的按键时才需要使用此符号, 否则可能会导致热键触发自己 |
UP | 单词 UP 可以跟在热键名后面使得在释放按键时触发热键, 而不是按下时 |
例如:
使用 &
来定义一个组合热键. 在下面的例子中, 你要按下 Numpad0, 再按下 Numpad1 或 Numpad2, 才能触发热键
Numpad0 & Numpad1::
MsgBox You pressed Numpad1 while holding down Numpad0.
Return
Numpad0 & Numpad2::
Run Notepad
Return
热字串也有修饰符,例如
:*:ftw::Free the whales
窗口特定的热键/热字串
#IfWinActive
#IfWinExist
注意:#IfWin 指令相互排斥,只有一个有效
例如
; 无标题 - 记事本
#IfWinActive Untitled - Notepad
!q::
MsgBox, You pressed Alt+Q in Notepad.
Return
; 任何不是无标题 - 记事本的窗口
#IfWinActive
!q::
MsgBox, You pressed Alt+Q in any window.
Return
; 记事本
#IfWinActive ahk_class Notepad
#space::
MsgBox, You pressed Win+Spacebar in Notepad.
Return
::msg::You typed msg in Notepad
; 画图
#IfWinActive Untitled - Paint ; 无标题 - 画图
#space::
MsgBox, You pressed Win+Spacebar in MSPaint!
Return
::msg::You typed msg in MSPaint!
一些示例
::btw::By the way ; 替换 "btw" 为 "By the way", 当你按下默认的终止符的时候(包括各种符号,空格换行tab等)
By the way
:*:hlw::Hellow World ; 替换 "btw" 为 "By the way" 而不需要按下终止符.
#n:: ; Ctrl+N 热键.
Run, notepad.exe ; 当你按下 Ctrl+N, 将启动记事本.
Return ; 热键内容结束. 当按下热键时, 下面的代码不会被执行.
#b:: ; Ctrl+B 热键
Send, {ctrl down}c{ctrl up} ; 复制选定的文本. 也可以使用 ^c, 但这种方法更加可靠.
SendInput, [b]{ctrl down}v{ctrl up}[/b] ; 粘贴所复制的文本, 并在文本前后加上加粗标签.
Return ; 热键内容结束, 这之后的内容将不会触发.
花括号 转义和事件
用花括号。它将告诉 AutoHotkey {!}
表示 "感叹号", 而不是要 "按下 Alt".
例如
Send, This text has been typed{!}
; 注意 {} 中的 !(感叹号)? 这是因为, 如果没有 {}, AHK 将按下 Alt 键
; 跟上面的例子类似, 只是这次是 Enter 键. AHK 将会输出 "Enter"
; 如果 Enter 没有加上 {} 的话.
Send, Multiple Enter lines have Enter been sent. ; 错误
Send, Multiple{Enter}lines have{Enter}been sent. ; 正确
想要表示按住或松开某个按键, 可以将这个键用花括号围起来, 同时加上单词 UP 或 DOWN
例如
; 下面这个例子表示按下一个键的时候再按下另一个键(或多个键).
; 如果其中一个方法不奏效, 试试另一个.
Send, ^s ; 都表示发送 CTRL+s 键击
Send, {ctrl down}s{ctrl up} ; 都表示发送 CTRL+s 键击
Send, {ctrl down}c{ctrl up}
Send, {b down}{b up}
Send, {Tab down}{Tab up}
Send, {Up down} ; 按下向上键.
Sleep, 1000 ; 保持 1 秒.
Send, {Up up} ; 然后松开向上键.
弧括号
怎样才能让我在发送超长文本时保证文本的可读性?*. 很简单. 使用我们所说的延续片段. 只需要在新行指定一个开括号, 然后是内容, 最后在它自己的行上加上一个闭括号
Send,
(
Line 1
Line 2
Apples are a fruit.
)