效率工具AutoHotkey的使用
AutoHotkey是面向普通电脑用户的自由开源的自动化软件工具,它让用户能够快捷或自动执行重复性任务
通过热键或热字串触发是AutoHotkey脚本中执行操作最常见的两种方式,它们都很容易编写且使用方便,因此快捷高效。
AutoHotkey能快速实现的常见功能包括:
- 重映射键盘按键、鼠标和游戏杆的按钮;
- 发送键击及鼠标和操纵杆的点击几乎可自动化所有操作;
- 启动程序或文档,操作与控制其他程序的窗口;
- 处理字符串,支持正则表达式;
- 操作文件和文件夹、注册表和INI文件;
- 设置静音,调节音量和声卡的其他设置;
- 创建自定义图形用户界面程序,从用户或文件中获取输入;
- 监视系统,当某些状态改变时自动响应;
- 通过检测图像和像素颜色来自动操作游戏,以减缓肢体重复性劳损;
上面引用wiki的内容,比较抽象,下面进行举例:
例子
场景1
开机之后,你想启动sublime。你要移动鼠标到sublime图标上双击打开。
有了AutoHotkey,可以直接定义一个快捷键,比如Alt+b
就运行sublime。
场景2
你在浏览器上看文档,现在要切换到sublime上写东西。
普通人可能会用Alt+Tab
进行切换或者用鼠标点击到sublime上。
有了AutoHotkey,可以直接定义一个快捷键,比如Alt+b
就可以让sublime变为前置窗口,进行编辑。
相当于无论sublime有没有启动,你想编辑文本,按下Alt+b
,sublime就在最前面,然后可以愉快的写东西。
而这一切都只要简单的配置,如下面脚本
1 |
|
其实如果就这一点点,感觉也没很大的作用。
但如果有了规模效应,把你常用的软件都绑上快捷键。
你可以就直接用快捷键来多个窗口切换,基本上不用鼠标。
场景3
用ssh连上远程机器时,管理员权限是要输入密码。因为安全考虑,密码是没有规律而且很长。每次都要从文本上复制出来,再粘贴。
这样就可以用AutoHotkey定义一个快捷键,按下快捷键就粘贴密码。一下省了很多重复操作。
比如我自己的数据库连接的密码,常用测试账号的密码都设置了这样的快捷键。
1 |
|
(当然Ditto,专门管理剪贴板的工具,可以替代这一功能)
场景4
在一些非vim编辑器中,想像vim 一样,可临时的用hjkl来移动光标。
就可以写下面的脚本这样做
1 |
|
场景5
我平时经常要用把文件路径复制到程序中。
在windows下复制的路径分隔符都是\
,但\
在程序中是转义字符。
所以每次复制后,都要把\
改为\\
或/
。
有了AutoHotkey,可以直接定义一个快捷键,把剪贴板中的内容进行替换,把\
替换成/
。
这样我复制路径后,按下快捷键后,再粘贴,路径就是正常的了。
如下面的脚本
1 |
|
场景6
在win7下,总是通过win+方向键来让窗口占左半屏或者右半屏。
但在win10下,win+方向键后,总要人去鼠标选一下另一半的窗口,这样就打断了节奏。
于是可以自己把重写上面的快捷键使实现功能。
如
1 |
|
场景7
场景2的扩展。
比如我打开了多个控制台窗口,我自己定义的是alt+c来激活cmd窗口。
但我想在这几个中切换,就要鼠标移动到任务栏上去选了,打断节奏。
前段时间,在读文档时发现 group系系的 api,像发现一个宝藏一样。
按一下激活cmd窗口,再按一下激活到下一个cmd窗口,非常实用
1 |
|
扩展下,浏览器,sublime,资源管理器,都可以这样
场景8
win10上,因为一些原因,装不Listary。所以不能像在在listary的时候那样,在资源管理器中打开命令。
但我在资源管理器当前目录打开cmd窗口的操作又很多,比如打包编译。
于是我定义一个从当前目录打开cmd,并在cmd中切换到该目录的命令。
实现这个有个困难,怎么用autohotkey的api,拿到资源管理器当前目录。
一段时间来没有想到解决办法,直到突然有一天,在AU3_Spy.exe
的下几行中看到了这个路径。
然后发现子控件的文本也会分行来显示。最后通过GetWindowText,加上spit,加正则表式,把这个路径提取出来了。
再就是怎么把cmd切换到这个指定目录。cmd不像别的命令,输-h,可以给参数之类的。于是用了一个取巧的办法。
win10的资源管理器文件菜单下会有一个打开cmd窗口的子菜单(有的版本只有打开powershell)
打开之后,打开任务管理器,在命令行这一列可以看到打开命令,按这个格式,run 后面加这个命令就可以实现了。
场景9
有时候不知不觉会打开很多资源管理器窗口。按场景7中的方法一个一个切,会切很多次。
如能把这些窗口按规则列出来就好了。
于是还真找到相关的api实现了。用WinGet,拿到符合条件的所有窗口列表。
循环遍历,用WinMove调整位置,再进行激活。可以按顺序列出窗口了。
1 |
|
AutoHotkey 的使用方法
AutoHotkey.exe <脚本文件>
现在新的版本可能对这方面进行了优化。
AutoHotkey 脚本语法
这里有份中文版的说明
http://ahkcn.sourceforge.net/docs/Tutorial.htm
常用的
#
-win
键^
-Ctrl
键!
-Alt
键MsgBox "1"
- 消息框InputBox cmd ,,,,200,100
- 输入框示例If WinExist("ahk_class OpusApp")
- 判断窗口类名为OpusApp
的窗口是否存WinActivate
- 激活窗口Run
- 运行命令%clipboard%
- 变量内容
关于窗口操作,autohotkey有丰富的api,上次把文档重新翻了下之后,的确也发现很多新东西。
基本上可以满住日常所用。
看了下别人的示例脚本,把调DLL拿windows api的操作都出来了,的确扩展挺强。
WinTitle 参数
这个参数是后面windows操作的基础,像windows api中的句柄概念一样。
文档上是这写的
1 |
|
用得多的就是ahk_class Window Class
,通过窗口类别定位类。
这种调用方式,有点像前面是指令类型,后面是指令参数。
可以通过 进程名,id,及进程文件路径,也是很全面了。
其它工具
在写脚本的时候,常要判断窗口类名,标题之类的。
现在新版直接自带AU3_Spy.exe
激活窗口信息查看器。
在没有这个的时候
自己是用的vs下面自带的工具spy.exe
还有vcPython自带的UISpy.exe
更多
https://sourceforge.net/projects/ahkcn/
https://autohotkey.com/
https://autohotkey.com/docs/AutoHotkey.htm
https://zh.wikipedia.org/zh-hans/AutoHotkey