你对 Windows 最大的不满是什么?反正于我是,Windows 上的程序大多没有提供「命令行接口」,也就是说,对于机器不可读。
对人可读不就行了吗?!为什么还要要求机器可读?效率!效率!效率!如果没有「命令行接口」,就得人去做一些很低端(不涉及价值判断)、重复枯燥的操作。比如:抢课、抢票……各种刷网页、点点点的行为。再比如:在 Office 里面按下「 alt 键」进行的一系列快捷操作。
那有没有改造 Windows 程序的可能呢?呃~~要么,跟开发者联系,指望他们提供一组接口;要么,自己上手,在不涉及程序本身的情况下,去定制一套接口。AutoHotKey 就是这么一套「改造 Windows 程序」的工具。经它改造后,那些 Windows 程序相当于多了一套接口,但不是正统意义上的「命令行接口」,而是一组热键。
AutoHotKey 会模拟人的操作,去执行一连串预先设定好的动作。这样,就可以在无需触动程序本身的前提下,提供一套全新的、定制的接口。当然,弊端是效率肯定没有原生接口那么高。但对于日常应用,已经绰绰有余了。
第一个项目:刷网页
假设我们有这么个需求:
- 点击「按钮 1 」;
- 点击「按钮 2 」;
- 等待网页弹出框,按下「确定」;
- 等待网页加载,再按一遍「确定」;
- 重复 400 遍;
好吧,废话不多说,直接上代码:
第一版脚本
#c::
click, 123, 456
click, 123, 567
send, {enter}
send, {enter}
return
意思是:按下「 Windows 键」+「C」,会执行 2~5 行语句,即 ::
和 return
之间的部分。
试一下,你会发现,然而并没有什么卵用。
第二版脚本
#c::
click, 123, 456
click, 123, 567
sleep, 1000
send, {enter}
sleep, 1000
send, {enter}
return
加了几句 sleep, 1000
,意思是「眯一觉,这一觉长达 1 秒(即 1000 毫秒)」。
然而,我们想要的是自动重复 400 遍啊,而不是按 400 次「Win + C」。
第三版脚本
#c::
loop, 400 {
click, 123, 456
click, 123, 567
sleep, 1000
send, {enter}
sleep, 1000
send, {enter}
}
return
第四版脚本
#c::
loop, 400 {
click, 123, 456
click, 123, 567
SetKeyDelay, 1000
send, {enter}{enter}
}
return
SetKeyDelay, 1000
意思是:后面的按键都隔上 1 秒。
第五版脚本
如果现在不光是批量重复,而且要每次填入一句话(每句话都不太一样),又该如何做呢?我们可以把要填入的字段事先写到一个文本当中(假设叫 keyword.txt
)。然后逐行读取,再进行操作。
#c::
loop {
FileReadLine, line, ./keyword.txt, %A_Index%
...
}
return
用滚轮控制数值增减
!WheelUp::
send, {Up}
return
!WheelDown::
send, {Down}
return
如何系统地学习 AutoHotKey ?
……
对了,AutoHotKey 有一个致命的缺陷:运行脚本的时候,你啥事也干不了🤦🏻♂️