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゚)ノ