Detect a double key press in AutoHotkey

后端 未结 2 1645
天命终不由人
天命终不由人 2020-12-15 16:59

I\'d like to trigger an event in AutoHotkey when the user double \"presses\" the esc key. But let the escape keystroke go through to the app in focus if it\'s not

相关标签:
2条回答
  • 2020-12-15 17:35

    With the script above, i found out that the button i wanted to detect was being forwared to the program (i.e. the "~" prefix).

    This seems to do the trick for me (i wanted to detect a double "d" press)

    d::
    keywait,d
    keywait,d,d t0.5 ; Increase the "t" value for a longer timeout.
    if errorlevel
    {
        ; pretend that nothing happened and forward the single "d"
        Send d
        return
    }
    ; A double "d" has been detected, act accordingly.
    Send {Del}
    return
    

    Source

    0 讨论(0)
  • 2020-12-15 17:36

    Found the answer in the AutoHotkey documentation!

    ; Example #4: Detects when a key has been double-pressed (similar to double-click).
    ; KeyWait is used to stop the keyboard's auto-repeat feature from creating an unwanted
    ; double-press when you hold down the RControl key to modify another key.  It does this by
    ; keeping the hotkey's thread running, which blocks the auto-repeats by relying upon
    ; #MaxThreadsPerHotkey being at its default setting of 1.
    ; Note: There is a more elaborate script to distinguish between single, double, and
    ; triple-presses at the bottom of the SetTimer page.
    
    ~RControl::
    if (A_PriorHotkey <> "~RControl" or A_TimeSincePriorHotkey > 400)
    {
        ; Too much time between presses, so this isn't a double-press.
        KeyWait, RControl
        return
    }
    MsgBox You double-pressed the right control key.
    return
    

    So for my case:

    ~Esc::
    if (A_PriorHotkey <> "~Esc" or A_TimeSincePriorHotkey > 400)
    {
        ; Too much time between presses, so this isn't a double-press.
        KeyWait, Esc
        return
    }
    WinMinimize, A
    return
    
    0 讨论(0)
提交回复
热议问题