AutoHotkey⼊门教程
AutoHotkey是什么
AutoHotkey简单来说是⼀个附带键盘宏录制的脚本⼯具,但是因为功能太过强⼤了,叫做⾃动化⼯具也许较为合适。从⾃动化⼯作这⼀点来看,AutoHotkey类似Linux下的Bash,都不以脚本语⾔的逻辑表达能⼒取胜,专门针对⾃动化⼯作设计,只不过Bash是命令⾏下的,对窗⼝⼀⽆所知,⽽AutoHotkey可以说是专门针对Windows的窗⼝平台的,有对快捷键和窗⼝环境的强⼤⽀持。(我见⼈将其称作GUI-Scripting,实在贴切)也许可以说AutoHotkey就是GUI环境下的Bash。既然Linux下Bash是必学的(的确应该学),那么AutoHotkey也就顺⾯学了吧。
安装配置
下载安装我就不多说了,真的不知道这⾥有个地址可以去。善⽤佳软的AutoHotkey 0级教程,顺⾯推荐下,推崇并介绍了很多好⽤的免费软件,个⼈很喜欢。
AutoHotkey的脚本是以ahk为后缀的⽂本⽂件,⽤你⾃⼰最喜欢的编辑器编辑吧,对于vim来说,已经内置了对ahk的语法⾼亮,我习惯将AutoHotkey的安装⽬录添加进环境的PATH中,这样⽤vim编辑脚本的时候可以直接简单的通过!Autohotkey %来运⾏脚本。(事实上我将其map到了F5上)但是愿意的话,其实.ahk⽂件在AutoHotkey安装后是与其关联的,直接双击也可以运⾏此脚本。
初步
招聘模板图片
⾸先编个最简单的脚本,看看效果先。
Run
将上⼀⾏的代码保存成⽂本,双击运⾏,或者⽤autohotkey运⾏之,会⾃动开启你机器上的默认浏览器登录我的博客,建议⼤家每天运⾏100次以上^^这个功能有点像Python的os模块的startfile函数,通过解析后⾯的字符串来判断应该使⽤什么与其关联的程序运⾏。当年⼯作的时候我有个开机脚本就是⽤Python此函数做的,功能就是开启⼯作需要的⼀⼤堆程序,VS,MSDN,TotalCommand⾃动⼀个⼀个开启并打开合适的⼯程或⽬录。现在这个功能也可以交由autohotkey来完成了。就是⼀条Run命名。
相对来说,对于特定⽤途的⼯具(⽐如Bash,autohotkey)来完成其擅长的事情是会⽐通⽤⼯具(⽐如Python)来的简洁的,此即⼀
例,Python中虽然也能完成这样的⼯作(在没有学习Bash前,在linux下它都是我的脚本⼯具),但是,需要进⾏import模块,函数调⽤等⼀堆难看的东西,autohotkey只需要⼀个Run。这⾥之所以讲的多点,是想说明⼀个特定⼯具哪怕并不是完成了什么不可能完成的任务,也许仅仅是将任务完成的更加简洁⾼效和优雅,也是⼀个⼯具的⽤途体现。⾄于值不值得为了这份优雅付出学习的代价,那就见仁见智了。
再看个例⼦:
Run c:/
此脚本会⾃动的⽤你机器配置的⽂本编辑器开启此⽂件。(⽂件必须存在)
但是以下脚本
c:/
⽆论⽂件存在不存在都会开始记事本,其中的区别,⼤家⾃⼰体会⼀下。事实上解析的强度⽐⼀般⼈能够想象的还要厉害,帮助⽂件中有这个⽰例:
Run
呵呵,什么意思⼤家都知道,⽜吧。可惜我⼀般不⽤客户端写邮件-_-!
快捷键
AutoHotkey⾃然对Hotkey⼜特别⽀持啦,脚本中⽤符号表⽰快捷键,⼀次排列,⼏个常见的修饰键对应符号是#Win,
!Alt,^Control,+Shift。那么什么叫依次排列呢?看下⾯的例⼦。
#space::Run
以上的例⼦即将Win + space 键设定为访问我的博客,运⾏后发现没有直接的反应,不像上述例⼦,此时AutoHotkey以trayicon⼩图标的形式运⾏于右下⾓,当你输⼊Win + space的时候会触发其运⾏默认的浏览器开启⽹站,并且⼀直有效,直到你将其关闭。(此例也推荐⼤家每⽇运⾏100遍^^与前⾯第⼀个例⼦结合交叉运⾏效果更佳)同理,要ctrl+space就是^space,要ctrl+alt+space就是^!space。
事实上,⼀个快捷键可以对应多个命令,也可以多个快捷键对应⼀个命令,格式有点不多,见下例。
#space::
Run
Runasn和asp是什么氨基酸
return
#^a::
#^b::
Run
return
此例即是在按下Win + space时打开我的CSDN博客和空间两个⽹页,并且CTRL + WIN + A与CTRL + WIN + B都是打开我的博客。举这两个例⼦主要是告诉⼤家AutoHotkey的格式相对⽐较灵活,⽐如这⾥的⼀对多和多对⼀。当不是⼀对⼀并且写在⼀⾏时,需要以return来表⽰脚本的结束。
信息窗⼝
这也许是最先应该说的,MsgBox
MsgBox Text
即可以通过MessageBox弹出Text的信息,⽐较⽅便
可以通过MsgBox弹出Yes Or No等选项,并获取,以判断分⽀执⾏程序。
MsgBox, 4,?,Yes or No?
ifMsgBox Yes
MsgBox You Said Yes!
else
ros版本名称MsgBox You Said No?
分⽀执⾏的语法⽐较奇怪,通过if结合MsgBox构成⼀个IfMsgBox特别应对MsgBox的选择。
对窗⼝的控制
个⼈感觉,对窗⼝的控制是AutoHotkey的精髓所在,这也是为什么我将其⽐作GUI下的bash。这⾥我还是通过从简单到复杂的例⼦来描述。⽐如,我现在在编辑⽂档的时候常常会需要打开AutoHotkey的帮助⽂档查看,⼀般我的操作是⽤⿏标点击其最⼩化的窗⼝以激活,或者我也会需要开启gvim以编辑⽰例程序,也是需要⽤⿏标去激活,因为⽤atl+Tab的⽅式还不如⽤⿏标快,有了AutoHotkey,我们就有更⽅便的Hotkey去完成这样的任务了。
SetTitleMatchMode 2
#tab::
ifWinNotExist, GVIM
{
MsgBox GVIM is not running
return
}
IfWinNotActive,GVIM
WinActivate,GVIM
else
WinActivate,Windows Live Writer
return
如上脚本,先判断是否有标题包含GVIM的窗⼝存在,不存在则报告GVIM没有运⾏,不然WIN+TAB键
的效果就是在GVim与Windows Live Writer之间切换,⾮常⽅便。ifWinNotExist如其名,⽤于判断⼀个窗⼝是否存在,ifWinNotActive也如其名⽤于判断⼀个窗⼝是否激活,第⼀个参数都是表⽰窗⼝标题⽂字的匹配,匹配模式由SetTitleMatchMode决定。
1: A window's title must start with the specified WinTitle to be a match.
2: A window's title can contain WinTitle anywhere inside it to be a match.
3: A window's title must exactly match WinTitle to be a match.
我们使⽤的是2,表⽰任意位置都匹配,默认是1,速度最快,必须是开始位置匹配。if⼀组的函数都还⽀持其他参数,具体的请查看帮助⽂档了,我这⾥主要是展⽰⼀下⽤途。
实际上AutoHotkey对窗⼝的控制还有很多强⼤的功能,⼀篇⼩⽂⽆法⼀⼀尽数,这⾥再举个例⼦:
SetTitleMatchMode 2
python入门教程非常详细下载Loop, 10
{
Random, x, 0, 50
Random, y, 0, 50
WinMove,GVIM,, %x%, %y%
WinHide,GVIM
Sleep, 100
WinShow,GVIM
}
上述程序运⾏后,GVIM窗⼝会变的疯狂。。。WinMove,WinHide,WinShow的意思都很明显,分别是移动,隐藏,显⽰窗⼝,这⾥有两个有新意的地⽅,⼀个是Random和x,y,有点编程知识的⼈都看出来了,AutoHotkey是允许设定变量的,此处的x,y就是,引⽤变量的⽅式是前后各1个百分号,与windows批处理程序的⼀样。另外就是Loop,10表⽰的循环结构了。
操作记录器
这个功能有点像国内⼀个也⽐较强⼤的软件键盘精灵的功能(当年玩那种泡菜⽹络游戏没有少⽤过它,单纯的键盘⿏标模拟功能不⽐AutoHotkey差),就是将键盘⿏标操作记录下来,⾃动⽣成AutoHotkey的脚本。省去了重复⼯作的脚本编写之苦。带GUI界⾯,截图如下:
点击左上⾓的Record按钮就开始记录键盘⿏标的操作了。然后通过点击录制时屏幕左上⾓的Stop停⽌录制。上⾯的脚本是我录制的⼀段激活Windows live Writer和最⼩化Windows live Writer的过程。
WinWait, ,
IfWinNotActive, , , WinActivate, ,
WinWaitActive, ,
MouseClick, left,  1159,  889
Sleep, 100
WinWait, xfsdlaf.ahk (E:/work) - GVIM,
IfWinNotActive, xfsdlaf.ahk (E:/work) - GVIM, , WinActivate, xfsdlaf.ahk (E:/work) - GVIM,
WinWaitActive, xfsdlaf.ahk (E:/work) - GVIM,
MouseClick, left,  908,  17
Sleep, 100
WinWait, ,
IfWinNotActive, , , WinActivate, ,thread standards 螺纹表
WinWaitActive, ,
MouseClick, left,  33216,  32891
Sleep, 100
WinWait, Don’t Repeat yourself 懒惰是程序员的美德 AutoHotkey 尝鲜 - Windows Live Writer,
IfWinNotActive, Don’t Repeat yourself 懒惰是程序员的美德 AutoHotkey 尝鲜 - Windows Live Writer, , WinActivate, Don’t Repeat yourself 懒惰是程序员的美德 AutoHotkey 尝鲜 - Windows Live Writer,
WinWaitActive, Don’t Repeat yourself 懒惰是程序员的美德 AutoHotkey 尝鲜 - Windows Live Writer,
MouseClick, left,  1362,  10
Sleep, 100
MouseClick, left,  1387,  10
Sleep, 100
会发现⾃动⽣成的代码较⼈⼯的代码还是乱了很多-_-!机器嘛,不是那么聪明。上⾯代码很重要的⼀个就是通过MouseClick来模拟⿏标的点击,有了这个功能,想⼲什么都可以了………………顺⾯提及⼀下,也可以通过
Send Keys
SendRaw Keys
SendInput Keys
SendPlay Keys
SendEvent Keys
来模拟键盘的输⼊。下⾯是⼀个当你暂时离开机器却有不想锁屏时可以提出警告的脚本。:)
SetTitleMatchMode 2
SetKeyDelay 50
Words = WARNING{!} DO NOT OPERATE MY COMPUTER{!}
KeyWait, LButton, D
run,gvim YouAreUnderMonitored,,Max
WinWait,YouAreUnderMonitored
Send i%Words%{Esc}
数据库查询学生成绩此脚本等待⿏标左键单击,然后⾃动开启gvim并最⼤化,然后⼀个字⼀个字输⼊警告信息^^不明就⾥的⼈⼀看估计碰⿁了。
⼩结
对于AutoHotkey这样强⼤的东西,⼀篇3000来字的⼩⽂实在是⽆法详细尽数其功能,⽽本⼈的⽬的也就是提供给觉得AutoHotKey复杂⽽不去学习的⼈尝个鲜,知道了AutoHotkey没有那么难以后,伴随着使⽤,参考着帮助⽂档,慢慢的会发现AutoHotkey也是⼀个离不开的⼯具了。我就在⽹上看到很多⼈狂喊,Linux下什么都好,就是没有AutoHotkey-_-!(其实类似的⾔论⾮常多,⽐如也没有Windows Live Writer equivalent)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。