keyboard-shortcuts - scripts - press key autohotkey
Detectar una doble pulsaciĆ³n de tecla en AutoHotkey. (2)
Me gustaría activar un evento en AutoHotkey cuando el usuario doble "presiona" la tecla esc . Pero deje que la tecla de escape pase a la aplicación enfocada si no se pulsa dos veces (digamos en el espacio de un segundo).
¿Cómo voy a hacer esto?
Se me ha ocurrido esto hasta ahora, pero no puedo averiguar cómo verificar la segunda tecla de escape presionando:
~Esc::
Input, TextEntry1, L1 T1
endKey=%ErrorLevel%
if( endKey != "Timeout" )
{
; perform my double press operation
WinMinimize, A
}
return
¡Encontré la respuesta en la documentación de AutoHotkey !
; 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
Así que para mi caso:
~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
Con la secuencia de comandos anterior, descubrí que el botón que quería detectar estaba siendo enviado al programa (es decir, el prefijo "~").
Esto parece hacer el truco para mí (quería detectar una doble "d" de prensa)
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