sheet scripts script press how hotkey descargar cheat ahk keyboard-shortcuts keyboard-events autohotkey

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

Source