AutoHotkey
0x00 什么是AutoHotkey
AutoHotkey (以下简称为AHK)能够运行自定义的脚本来实现自动化操作,比如打开特定路径下的文件(如果文件路径很长或者经常变化),处理大量但是相同的操作等繁琐的工作等,都可以简化为一个回车的操作。其功能类似于IOS平台上的 WorkFlow。
下载安装完以后会自带详细的英文版文档说明,不过官网上有亲民的中文版文档~
AHK脚本的后缀名为 .ahk
,比如 Hello.ahk
。打开创建的脚本文件编写代码即可。对于编写脚本语言,合适的编辑器不可少,这里我找到以下这些:
- SciTE4AutoHotkey
- Notepad++(在语言中选择Autolt可以高亮语法)
- 当然在 VScode 里肯定也少不了对应的插件
0x01 AHK的基本语法
变量和表达式
一开始没有仔细看文档说明,上来直接使用常规语言的赋值方法,结果发现AHK的思路好反人类。在AHK中,变量的赋值和获取方式有两种 传统方法 和 __表达式方法__(推荐后者)。
__传统方法__(=)
这种方法赋值似乎会默认为字符串赋值,比如
1 | a = 100 ; 字符串类型的 100 |
用惯了C++、Python等类型分明的语言,一接触传统方法一定会抓狂。所以推荐 表达式方法
__表达式方法__(:=)
赋值的语法和其他语言相同,不过就是在 =
前面多了一个 :
这样,就可以将一个数字方便地赋值给一个变量啦
1 | a := 100 ; 数字 100 |
对于百分号的使用,文档中有一句话
注意: 变量名并非 总是 用百分号括起来; 百分号只在变量名和不加引号的文字一起时才需要. 除了创建 动态变量引用 或 动态函数调用 之外, 不应在其他任何地方使用百分号.
内置变量
和PHP一样,AHK有很多的变量可以方便的获取很多信息,比如时间日期、脚本自身的属性。过多不贴
Send 发送键
Send键可以做很多事,比如发送一些按键到一个程序中,来模拟打字或按键操作。主要有这四种方法
- 原始模式 使用
SendRaw
或者{raw}
。如SendRaw, ^g
发送的就是^g
。 - 文本模式 用
{}
包含需要发送的内容,防止^+!#{}
等热键的触发,类似于 __原始模式__。 - 普通模式 可发送按键,
^+!#{}
具有特殊含义。如发送Alt
键可使用Send !
或者Send {Alt}
。符号表见 __0x02__。 - 盲从模式 不知道咋用(怂)。
常用的 Send
普通模式下的命令参数
命令 | 描述 |
---|---|
{Browser_Back} | 按下浏览器的”后退”按钮 |
{Browser_Forward} | 按下浏览器的”前进”按钮 |
{Browser_Refresh} | 按下浏览器的”刷新”按钮 |
{Browser_Stop} | 按下浏览器的”停止”按钮 |
{Browser_Search} | 按下浏览器的”搜索”按钮 |
{Browser_Favorites} | 按下浏览器的”收藏”按钮 |
{Browser_Home} | 启动浏览器并打开主页 |
{Volume_Mute} | 主音量静音/取消静音. 通常相当于 SoundSet, +1, , mute. |
{Volume_Down} | 减小主音量. 通常相当于 SoundSet -5. |
{Volume_Up} | 增加主音量. 通常相当于 SoundSet +5. |
{Media_Next} | 在媒体播放器中播放下一曲目 |
{Media_Prev} | 在媒体播放器中播放前一曲目 |
{Media_Stop} | 停止媒体播放器 |
{Media_Play_Pause} | 播放/暂停媒体播放器 |
{Launch_Mail} | 启动电子邮件程序 |
{Launch_Media} | 启动媒体播放器 |
{Launch_App1} | 启动用户程序 1 |
{Launch_App2} | 启动用户程序 2 |
{PrintScreen} | Print Screen |
{CtrlBreak} | Ctrl+break |
{Pause} | Pause |
{Click} | 鼠标右击 |
0x02 热键表
常用符号键
符号 | 描述 |
---|---|
# | Win(Windows 徽标键) |
! | Alt |
+ | Shift |
^ | Ctrl |
* | 通配符 |
Tab | Tab键 |
$ | 表示使用钩子创建这个热键,这样避免了循环激发。如果使用 a::a 将会无穷递归! |
~ | 激发热键时, 不会屏蔽(被操作系统隐藏) 热键中按键原有的功能 |
& | 用于连接两个按键,合并成一个自定义热键 |
Space | 空格键 |
CapsLock | 大小写锁定键 |
Enter (或 Return) | 回车键 |
Escape (或 Esc) | 退出键 |
Numpad0等 | NumLock关闭下数字小键盘 |
NumpadIns等 | NumLock打开下的数字小键盘 |
光标控制
符号 | 描述 | 符号 | 描述 |
---|---|---|---|
Backspace (或 BS) | 退格键 | Delete(或 Del) | 删除键 |
Home | Home键 | End | End键 |
PgUp | 向上翻页键 | PgDn | 向下翻页键 |
Up | 向上方向键 | Down | 向下方向键 |
Left | 向左方向键 | Right | 向右方向键 |
鼠标部分
符号 | 描述 |
---|---|
LButton | 鼠标左键 |
RButton | 鼠标右键 |
MButton | 鼠标中键或滚轮 |
WheelDown | 向下转动鼠标滚轮 |
WheelUp | 向上转动鼠标滚轮 |
#IfWin热键
根据所处的窗口以及活动的情况,执行不同的操作。
- #IfWinActive
- #IfWinExist
- #IfWinNotActive
- #IfWinNotExist
基本格式为
1 |
|
有时候会需要多个热键对应一种功能,这个时候可以用过个热键叠放来处理
1 | ^Numpad0:: |
更多的热键参考:热键(鼠标, 操纵杆和键盘快捷键)
0x03 其他
其实毕竟是一种新的脚本语言,学习和记忆相关的用法比较枯燥,所以边实践边学习是最简单且高效的学习过程。
其实这一篇blog也不过是些十分零散的知识点,网络上学习AHK的教程千千万。这里强烈推荐
- 边看故事边学AHK的 AutoHotkey快餐店
- 收录了其他优秀博客链接的 AutoHotkey 学习指南
AHK实现了重复过程的简化,也能用少量的按键实现复杂的操作,下面是我想到的部分功能
- 快速打开某些常用网站 baidu,google等
- 快速打开常用应用
- QQ的表情包限制太多,比如大小,尺寸……那么将表情包保存到本地,然后使用热键 +
__send__
表情包:D,斗图更方便。 - 听说不少游戏需要同时按多个键来放大招……AHK岂不是开挂般存在。
不知道如此强大的AHK,被漏洞利用了会发生什么大新闻
如果你有啥想法,可以在评论区留言哦 (o゚v゚)ノ