神奇的AHK,同一个目标,可以用多条路线实行,今天我来讲讲这个热键击打次数的话题哈!
首先出场第一位!利用【Count】计数选手!
~LAlt::
if Count<1
{
if A_TimeSincePriorHotkey<400 ;这是一个时间间隔,两次热键点击的时间间隔
{
if A_PriorHotkey = %A_ThisHotkey%
{
Count++ ;次数加1
}
else
{
Count:=0 ;如果检测时间间隔大于400毫秒,那么直接转为0次数
}
}
else
{
Count:=0 ;第一次测试间隔就大于400毫秒了,直接转为0
}
}
else
{
Count:=0
}
if Count>0
{
Run notepad
Count:=0
}
return
;~ 分别是A_TimeSincePriorHotkey(上次热键到本次热键被点击的时间间隔,以毫秒计算)、A_PriorHotkey(上次点击的按键)、A_ThisHotkey(当前点击的按键)
;奇怪了,进入代码区域后,就不能再回到文本区域了,那我在这里面介绍第二位选手好了,摩斯函数出场!
摩斯(timeout = 400) { ;
tout := timeout/1000
key := RegExReplace(A_ThisHotKey,"[\*\~\$\#\+\!\^]")
Loop {
t := A_TickCount
KeyWait %key%
Pattern .= A_TickCount-t > timeout
KeyWait %key%,DT%tout%
If (ErrorLevel)
Return Pattern
}
}
;~ ;使用示例:
;~ !z::
;~ p := 摩斯()
;~ If (p = "0")
;~ MsgBox 单击
;~ Else If (p = "00")
;~ MsgBox 双击
;~ Else If (p = "01")
;~ MsgBox 长按
;~ Else
;~ MsgBox 按键模式 %p%
;~ Return
;接着!!我自己看到【A_TimeIdle】常量,自由发挥了一个双击三击脚本设计!
第三位!!出场!!
;--------------------------------------------------
Home::
Sleep, 500
If(A_TimeIdle>150 And 330>A_TimeIdle)
MsgBox, , 超进化, 这是双击, 1
Else If(A_TimeIdle>400)
MsgBox, , 进化, 这是单击, 1
Else If(A_TimeIdle < 145)
MsgBox, , 究极体, 这是三击, 1
Else
MsgBox, , 啥, 这是啥?%A_TimeIdle%, 1
Return
;--------------------------------------------------------
定时执行的代码进行后台按键会影响A_TimeSincePriorHotkey、A_PriorHotkey、A_ThisHotkey、A_TickCount等这些值,因此包含这些变量的代码会异常