
No meu script AutoHotKey, quero congelar a entrada do usuário, ou seja, qualquer entrada do usuário não será propagada para o programa ativo e, em seguida, descongelará e fará com que todas as entradas que o usuário digitou vão para o programa.
Em outras palavras: eu congelo, então o usuário digita "xyz" mas isso énãopassado para o programa ativo, e então eu descongelo, as teclas "xyz" são passadas para o programa, e então tudo volta ao normal e o usuário pode digitar novamente e irá para o programa ativo.
Assim, enquanto eu insiro um monte de texto no programa usando ControlSend
, a digitação do usuário não interfere.
Possível? Como?
Responder1
Se você conseguir enviar todo o seu texto usando um SendInput, o AutoHotkey cuidará do problema para você. Da tecla AutoHotkeyEnviardocumentação,
SendInput e SendPlay [...] armazenam em buffer qualquer atividade física do teclado ou mouse durante o envio, o que evita que as teclas digitadas pelo usuário sejam intercaladas com as que estão sendo enviadas.
Se for aceitável perder a entrada do usuário enquanto ela está congelada (em vez de armazená-la em buffer e enviá-la depois), você pode usarEntrada de bloco. Algo como
BlockInput On
; Send desired text here
BlockInput Off
No entanto, a documentação do BlockInput diz que se ele iniciar quando as chaves já estiverem pressionadas, ele poderá bloquear os eventos de "chave ativa" e fazer com que as chaves pareçam presas. Portanto, dependendo de quando você o usa, talvez seja necessário primeiro esperar que as chaves sejam liberadas usandoKeyWait.
Responder2
Use o comando Entrada.
http://autohotkey.free.fr/docs/commands/Input.htm
editar
Você disse:
No meu script AutoHotKey, quero congelar a entrada do usuário, ou seja, qualquer entrada do usuário não será propagada para o programa ativo e, em seguida, descongelará e fará com que todas as entradas que o usuário digitou vão para o programa.
Em outras palavras: eu congelo, então o usuário digita "xyz", mas isso não é passado para o programa ativo, e então eu descongelo, as teclas "xyz" são passadas para o programa, e então tudo volta ao normal e o usuário pode digitar novamente e irá para o programa ativo.
O comando de entrada faz:
; Aguarde o usuário pressionar qualquer tecla. As teclas que não produzem caracteres visíveis, como as teclas modificadoras, as teclas de função e as teclas de seta, são listadas como teclas finais para que também sejam 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}
Você pode fazer um loop para várias chaves ou usar uma sequência de chaves como argumento.