Congelando a entrada do usuário com o AutoHotKey

5

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 terá todas as entradas digitadas pelo usuário no 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, pressionamentos de tecla "xyz" são passados para o programa, e então tudo volta ao normal e o usuário pode digitar novamente e ele irá para o programa ativo.

Isto é assim, enquanto eu insiro um monte de texto no programa usando ControlSend , a digitação do usuário não irá interferir.

Possível? Como?

    
por Ram Rachum 10.09.2011 / 15:52

2 respostas

1

Se você conseguir enviar todo o seu texto usando um SendInput, o AutoHotkey resolverá o problema para você. Na documentação do AutoHotkey Enviar ,

SendInput and SendPlay [...] buffer any physical keyboard or mouse activity during the send, which prevents the user's keystrokes from being interspersed with those being sent.

Se for aceitável perder a entrada do usuário enquanto estiver congelado (em vez de armazená-lo em buffer e enviá-lo posteriormente), você poderá usar BlockInput . Algo como

BlockInput On
; Send desired text here
BlockInput Off

No entanto, a documentação do BlockInput diz que, se ele iniciar quando as teclas já estiverem desativadas, ele poderá bloquear os eventos "key up" e fazer com que as teclas apareçam presas. Então, dependendo de quando você usá-lo, você pode ter que primeiro esperar que as chaves sejam lançadas usando KeyWait .

    
por 17.09.2011 / 16:49
-2

Use o comando de entrada.

link

editar

Você disse:

In my AutoHotKey script, I want to freeze user input, i.e. any input from the user will not propagate to the active program, and then unfreeze and have all the input that the user typed go to the program.

In other words: I freeze, then the user types "xyz" but this is not passed to the active program, and then I unfreeze, keystrokes "xyz" are passed to the program, and then everything's back to normal and the user can type again and it'll go to the active program.

O comando de entrada faz:

; Wait for the user to press any key. Keys that produce no visible character, such as the modifier keys, function keys, and arrow keys, are listed as end keys so that they will be detected too.

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 usa uma string de chaves como argumento.

    
por 12.09.2011 / 11:08

Tags