Congelar la entrada del usuario con AutoHotKey

Congelar la entrada del usuario con AutoHotKey

En mi script AutoHotKey, quiero congelar la entrada del usuario, es decir, cualquier entrada del usuario no se propagará al programa activo, y luego descongelarla y hacer que toda la entrada que el usuario escribió vaya al programa.

En otras palabras: me congelo, luego el usuario escribe "xyz" pero esto esnopasa al programa activo, y luego lo descongela, las pulsaciones de teclas "xyz" se pasan al programa, y ​​luego todo vuelve a la normalidad y el usuario puede escribir nuevamente e irá al programa activo.

Esto es así, mientras ingreso un montón de texto en el programa usando ControlSend, la escritura del usuario no interferirá.

¿Posible? ¿Cómo?

Respuesta1

Si puede enviar todo su texto usando un SendInput, entonces AutoHotkey se encarga del problema por usted. Desde la tecla AutoHotEnviardocumentación,

SendInput y SendPlay [...] amortiguan cualquier actividad física del teclado o del mouse durante el envío, lo que evita que las pulsaciones de teclas del usuario se intercalen con las que se envían.

Si es aceptable perder la entrada del usuario mientras está congelada (en lugar de almacenarla en el buffer y enviarla después), puede usarEntrada de bloque. Algo como

BlockInput On
; Send desired text here
BlockInput Off

Sin embargo, la documentación de BlockInput dice que si se inicia cuando las teclas ya están presionadas, puede bloquear los eventos de "tecla arriba" y hacer que las teclas parezcan atascadas. Entonces, dependiendo de cuándo lo use, es posible que primero deba esperar a que se liberen las claves usandoclaveespera.

Respuesta2

Utilice el comando Entrada.

http://autohotkey.free.fr/docs/commands/Input.htm

editar

Usted dijo:

En mi secuencia de comandos AutoHotKey, quiero congelar la entrada del usuario, es decir, cualquier entrada del usuario no se propagará al programa activo, y luego descongelarla y hacer que toda la entrada que el usuario escribió vaya al programa.

En otras palabras: me congelo, luego el usuario escribe "xyz" pero esto no se pasa al programa activo, y luego lo descongelo, las pulsaciones de teclas "xyz" se pasan al programa, y ​​luego todo vuelve a la normalidad y el usuario puede escribir nuevamente y pasará al programa activo.

El comando de entrada hace:

; Espere a que el usuario presione cualquier tecla. Las teclas que no producen ningún carácter visible, como las teclas modificadoras, las teclas de función y las teclas de flecha, se enumeran como teclas de finalización para que también sean detectadas.

Input, SingleKey, L1, {LControl}{RControl}{LAlt}{RAlt}{LShift}{RShift}{LWin}{RWin}{F1}{F2}{F3}{F4}{F5}{F6}{F7}{F8}{F9}{F10}{F11}{F12}{Left}{Right}{Up}{Down}{Home}{End}{PgUp}{PgDn}{Del}{Ins}{BS}{Capslock}{Numlock}{PrintScreen}{Pause}

Puede repetir esto para varias claves o tomar una cadena de claves como argumento.

información relacionada