辨别物理按键和重复按键

时间:2019-01-08 19:13:28

标签: autohotkey

在“自动热键”中:是否可以区分物理按键和重复按键?

我正在寻找点网中对KeyEventArgs.IsRepeat的平衡。

我希望找到这样的更好的东西:

*key1::
If (hotkey1_active)
   return
hotkey1_active := 1
Myfunction1()
return

*key1 up::
hotkey1_active := 0
return

找到了上面的示例代码here

2 个答案:

答案 0 :(得分:2)

没有办法知道,唯一已知的是重复是由按键按下而没有按键向上组成的。

也许有某种方法不必为每个热键创建一个变量。

尝试一下,我认为这对于正常情况可能已经足够了:

*a::
    if (A_PriorHotkey = A_ThisHotKey)
        return
    Myfunction1()
return

*a Up:: return ; Does nothing but change A_PriorHotkey.

答案 1 :(得分:0)

AFAIK没有内置的用于按下按键检查的语法。但是您可以使用getkeystate循环检查状态:

key := "a"
state0 := getkeystate(key, "P")                 ; init key state
c := 0

loop 
{
    sleep 30                                    ; sleep to reduce CPU usage
    state1 := getkeystate(key, "P")             ; getkeystate
    state_on := (state1 > state0)               ; check if key state is changed to 'on'
    ; state_off := (state1 < state0)                ; check if key state is changed to 'off'
    state0 := state1                            ; save previous state
    if (state_on) {
        c += 1
        tooltip %key% pressed %c% times
        ; Myfunction1()
    }
}

这很有可能是物理状态的变化。