文章目录
- 脚本基础
- 连击识别
- setTimer
- 判断和选择
脚本基础
尽管通过窗口识别与按键映射,就可以胜任很多工作了,但AutoHotKey仍提供了一些简单的编程功能,对一些稍微复杂的任务,也可以做到得心应手。但要注意一点,AHK
的V1和V2在语法上有很大差异,接下来所有内容,均适用于V2版本。
ahk中,通过;
进行单行注释,通过\**\
进行多行注释,而且多行注释符号只有出现在首行时才有效。
从编程的角度来说,任何编程语言都有变量,AHK亦然,但在AHK中,变量不需要声明,且变量名不区分大小写。尽管提供了字符串、数值、布尔等数据类型,但不同类型之间可自由转换,什么时候用什么类型完全视情况而定。其中,数值支持整型和浮点型,且以0x
开头的整型表示十六进制。
连击识别
下面写一个简单的脚本热个身,下面这段脚本的含义是,当连续点击不同次数的大写键之后,分别弹出相应的信息
CapsLock::
{globalif (A_ThisHotkey != A_PriorHotkey){num := 1return}num += 1SetTimer MultiPresses, -500Return
}; 弹出连击次数
MultiPresses(){globalMsgBox "点击" . num . "次"num := 0 ; num清零Return
}
其中,global
表示开启全局模式,从而让num
这个变量不局限于某个作用域。
A_ThisHotkey
和A_PriorHotkey
是内置变量,前者表示最近执行的热键,后者表示上一次执行的热键。
所以if
语句表示,如果这一次点击的按键与上一次不同,那么说明只点击了一次CapsLock
,故而将num
设为1,然后退出。否则,说明上一次点击的也是CapsLock
,所以num
要加1。
最后调用了SetTimer
函数,表示在500毫秒内如果没再按键,那么就执行MultiPresses
这个函数。
在MultiPresses
中,弹出一个MsgBox
,后面的%num%
表示提取num
这个变量的值,最后重置num
的值。
其效果为
setTimer
setTimer
可在指定的时间间隔内自动重复调用函数,其使用方法为
SetTimer Function, Period, Priority
其中Function
即被调用的函数,Period
的含义与其取值有关
- 大于 0,定时器将自动重复,直到脚本明确禁用
- 小于 0,定时器将只运行一次,上面的案例中,-500表示将在500ms后调用Function, 然后删除定时器。
- 如果为0,则直接删除这个定时器。
最后一个参数Proirity
表示优先级,如果只输入两个参数,则轮不到Proirity
。
判断和选择
在上面这个脚本中,用到了if
表达式,这几乎是所有编程语言必备的分支语句了,表示判断,而且写法也高度相似,在AHK中,完整的表达式如下,如果花括号中是单行语句,则花括号可以省略。
if(){}
if(){}
else{}
此外,AHK支持switch...case
语句,其语法格式为
switch SwitchValue, CaseSense
{
case CaseValue1:Statements1
case CaseValue2a, CaseValue2b:Statements2
default:Statements3
}
仍以连击为例,可将上式改写为
CapsLock::
{globalif (A_ThisHotkey != A_PriorHotkey){num := 1return}num += 1SetTimer MultiPresses, 500Return
}MultiPresses(){globalswitch num{case 2: MsgBox "您点击两次"case 3: MsgBox "您点击三次"case 4: MsgBox "您点击四次"default: MsgBox "您点击许多次"}num := 0 ; num清零Return
}