ユーザーの入力を横取りして取得する(NT系専用)
Input [, OutputVar, Options, EndKeys, MatchList]
引数名 | 説明 |
---|---|
OutputVar |
入力されたテキストを格納する変数名。 EnterキーはLF(`n)として記録され、そのほかの非文字キーは無視される。 |
Options |
以下のオプションをスペースで区切って列挙する。
|
EndKeys |
入力を終了させるキー。 このキーが押されると、コマンドの実行が終了し、ErrorLevelに「Endkey:押されたキー名」が代入される。 Sendコマンドで使用するようなフォーマットで文字や特殊キー名を列挙する。 Ctrlキーなどの修飾キーを指定するときは、「 {LCtrl} 」のように左右を明示指定する必要がある。 |
MatchList |
「, 」で区切って文字列を列挙する。入力内容がここに列挙したものに一致した場合、コマンドは終了しErrorLevelが「Match」になる。 カンマ区切りだが、引数の区切りとは扱いが違い、カンマの前後の空白文字などは、文字列の一部とみなされる。 変数の内容は展開されてから、カンマで分割される。リストが長くなる場合は、変数に格納しておくとよい。 文字列中でカンマをあらわすには、2つのカンマの連続( ,, )を使用する。
|
1 or 0 |
すべての引数を省略して実行した場合、割り込みにより停止中のスレッドで実行されているInputコマンドを終了させたら「0」、停止させるInputコマンドがなかったら「1」になる。 |
NewInput | 割り込んだスレッドが新しいInputコマンドを実行した |
Max | 入力がオプションの「L」で指定した長さを超え、MatchListで指定した文字列にはマッチしなかった |
Timeout | オプションの「T」で指定したタイムアウト時間が経過した |
Match | MatchListで指定した文字列にマッチした |
EndKey:name |
Endkeysに列挙された終了キーが押された場合。 「Endkey:」に続きそのキー名が格納される。 例えば、「Endkey:Enter」。 |
このコマンドを使用すると、キーボードによる入力を監視して、入力されたテキストをOutputVarに格納することができる。
入力の監視はEndkeysで指定されたキーが押されるか、Lオプションで指定した文字数に達するか、Tオプションで指定した時間が経過するか、MatchListで指定されている文字列に入力が一致すると終了し、終了理由がErrorLevel変数に格納される。
入力を待っている間は、ホットキーやメニューなどで新たなスレッドが割り込むことが可能。
割り込んできたスレッドで新たにInputコマンドが実行されると、割り込まれたInputコマンドはErrorLevelが「NewInput」となって終了する。
Inputコマンドを引数なしで実行すると、既存のInputコマンドの終了のみが行われる。
このコマンドが最初に実行されたとき、キーボードフックが有効化される。
それ以降は、スクリプトが常駐状態になり、ExitAppコマンドを実行するまで終了しなくなる。
ホットストリングの機能を使うと、簡単に特定のキーストロークに対して動作を割り当てることができる。
KeyWait, InputBox, #InstallKeybdHook, Threads, StringCaseSense
; 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}
; This is a working hotkey example. Since the hotkey has the tilde (~) ~[:: Input, UserInput, V T5 L4 C, {enter}.{esc}{tab}, btw,otoh,fl,ahk,ca if ErrorLevel = Max { MsgBox, You entered "%UserInput%", which is the maximum length of text. return } if ErrorLevel = Timeout { MsgBox, You entered "%UserInput%" at which time the input timed out. return } if ErrorLevel = NewInput return IfInString, ErrorLevel, EndKey: { MsgBox, You entered "%UserInput%" and terminated the input with %ErrorLevel%. return } ; Otherwise, a match was found. SetKeyDelay, -1 ; Most editors can handle the fastest speed. if UserInput = btw Send, {backspace 4}by the way else if UserInput = otoh Send, {backspace 5}on the other hand else if UserInput = fl Send, {backspace 3}Florida else if UserInput = ca Send, {backspace 3}California else if UserInput = ahk Run, www.autohotkey.com return