Auto Hot Key(AHK)入门
AHK用了很久却一直没有深入学过, 今天深入一点写个入门.
AHK不比什么RPA工具效率低. 最大的缺失可能是元素识别.
五种语句体
;0. 自动执行的,跟js一样写什么执行什么
Some code
return
;1.定义快捷键(热键)的
^j::
Some Code
Return
;2. 定义热字符串的
::btw::
Send, by the way
return
;3. 定义子程序的. 相当于汇编里面的label, 然后用gosub调用(跟goto有点像)
subName:
Some Code
return
;4. 定义函数的
function(param1, param2:="xxx"){
Some Code
return "A value"
}
多文件组织
可以用#include
包含其他ahk文件
传统语法
ahk说明里面讲到ahk历史悠久,所以有一些传统语法(就是看上去有些恶心的语法), 比如说某些命令里面字符串可以不加引号让你搞不清哪儿是字符串开始和结尾...
基础语法
; 单行注释
/*
多行注释
但有趣(烦躁)的是, /*和*/必须在行首. 像这一行的这俩是不起作用的
*/
"这是一个字符串, 需要双引号"
变量 := 赋值
讲讲字符串里面的转义. C语言是用\
转义, AHK比较变态使用<code></code>
转义,搞得我markdown都得写code标签. 主要转义有
. %
t r
n%
用于创建动态变量引用和动态函数调用, 有点让我想起来.bat
格式
但是但是但是, "
的转义是""
, 很神奇吧, 那就是说如果要表示一个引号字符串,加上把它括起来的引号实际上是4个引号哈哈哈哈""""
+-*/()
, 和++ -- += -=
等运算符都支持, condition?value1:value2
的三元运算也支持.
:=
是赋值运算符, 不太一样. and or not
是逻辑运算符
支持类似js的对象, 可以用这样的obj := {Key1: Value1, Key2: Value2}
形式创建, 以obj.Key1
的形式访问
数组也是[]
形式的, 但是第一个成员的序号是1而不是0
Ctrl键未绑定的快捷方式
按键:
软件 | ABCDEFGHIJKLMNOPQRSTUVWXYZ | 12346890 | F123456789⒑⒒⒓ |
---|---|---|---|
EXCEL | JMQ | 无 | F1 F2 |
Excel参考: https://www.asap-utilities.com/excel-tips-shortcuts.php
自带的常用ahk
Windowspy.ahk
用于查找句柄ClassNN
部分常用命令
; 设置鼠标坐标为屏幕
CoordMode, Mouse, Screen
; 按窗口标题名称点击登录
ControlClick, X161 Y489, 系统登录
; 点击坐标
Click, 123 456
; 激活不在前台的窗口
WinWaitActive, ahk_exe EXCEL.EXE
; 停1000ms
Sleep, 1000
; 发送alt+F4
Send, !{F4}
; 发送字符串并且不激活输入法
Send, {text}some string
; 运行程序
Run, "D:\Program Files\网店管家云端版\wdgjyun.exe"
; 创建函数
saveExcel(filename)
{
; 删除文件
FileDelete, %filename%
Sleep, 1000
send, {F12}
Sleep, 2000
send, {text}%filename%
Sleep, 1000
send, {Enter}
Sleep, 1000
send, {Enter}
Sleep, 2000
Send, !{F4}
}
; 点击图片. x1,y1 ~ x2,y2是图片的搜索区域. delta是点击位置与图片左上角在xy坐标上的偏移位置
imageClick(x1, y1, x2, y2, imageFile, delta){
ImageSearch, FoundX, FoundY, x1, y1, x2, y2, %imageFile%
if (ErrorLevel = 2)
MsgBox Could not conduct the search.
else if (ErrorLevel = 1)
MsgBox Icon could not be found on the screen.
else{
MouseClick, left, FoundX+delta, FoundY+delta
}
}