AutoHotKey でユーザー入力をフリーズする

AutoHotKey でユーザー入力をフリーズする

AutoHotKey スクリプトでは、ユーザー入力をフリーズして、ユーザーからの入力がアクティブなプログラムに伝播しないようにし、その後フリーズを解除して、ユーザーが入力したすべての入力がプログラムに渡されるようにしたいと考えています。

つまり、私がフリーズすると、ユーザーは「xyz」と入力しますが、これはないアクティブなプログラムに渡され、その後フリーズ解除され、キーストローク「xyz」がプログラムに渡され、すべてが正常に戻り、ユーザーが再度入力するとアクティブなプログラムに渡されます。

これにより、 を使用してプログラムに大量のテキストを入力するときにControlSend、ユーザーの入力が妨げられることがなくなります。

可能ですか?どうやって?

答え1

1つのSendInputを使用してすべてのテキストを送信できる場合は、AutoHotkeyが問題を解決します。AutoHotkeyから送信ドキュメンテーション、

SendInput と SendPlay [...] は、送信中に物理的なキーボードまたはマウスのアクティビティをバッファリングし、ユーザーのキーストロークが送信中のキーストロークに混ざってしまうことを防ぎます。

凍結中にユーザー入力を失っても問題ない場合(バッファリングして後で送信するのではなく)、次のように使用できます。ブロック入力。 何かのようなもの

BlockInput On
; Send desired text here
BlockInput Off

しかし、BlockInputのドキュメントには、キーが押された状態で起動すると、「キーアップ」イベントがブロックされ、キーが押されたままの状態になる可能性があると書かれています。そのため、使用するタイミングによっては、まずキーが離されるのを待つ必要があるかもしれません。キーウェイト

答え2

入力コマンドを使用します。

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

編集

あなたが言った:

AutoHotKey スクリプトでは、ユーザー入力をフリーズして、ユーザーからの入力がアクティブなプログラムに伝播しないようにし、その後フリーズを解除して、ユーザーが入力したすべての入力がプログラムに渡されるようにしたいと考えています。

つまり、フリーズすると、ユーザーは「xyz」と入力しますが、これはアクティブなプログラムに渡されません。その後、フリーズを解除すると、キーストローク「xyz」がプログラムに渡され、すべてが正常に戻り、ユーザーが再度入力するとアクティブなプログラムに渡されます。

入力コマンドは次のことを行います。

; ユーザーが任意のキーを押すまで待機します。修飾キー、ファンクション キー、矢印キーなど、目に見える文字を生成しないキーは、終了キーとしてリストされるため、それらも検出されます。

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}

これを複数のキーに対してループすることも、キーの文字列を引数として受け取ることもできます。

関連情報