Input

ユーザーの入力を横取りして取得する(NT系専用)

Input [, OutputVar, Options, EndKeys, MatchList]

Parameters

引数名説明

OutputVar

入力されたテキストを格納する変数名。
EnterキーはLF(`n)として記録され、そのほかの非文字キーは無視される。
Options 以下のオプションをスペースで区切って列挙する。
B
バックスペースが押されても入力された文字を削除しない
C
MatchListで大文字小文字を区別する
I
AutoHotkeyがSendコマンドなどで生成したキー入力を無視する
M
Ctrl+AからCtrl+Zまでのショートカットキーを受け取れるようにする。
これらの入力がなされた場合、OutputVarは1から26までのASCII文字になる。
「Transform, CtrlC, Chr, 3」のようにして変数に同様のASCII文字を格納し、「if OutputVar = %CtrlC%」のようにして各ショートカットキーが押されたかどうかを判定する。
Ln
nに入力を受け付ける文字数の上限を指定する。(例:L5)
この文字数を超えると、コマンドは終了し、ErrorLevelは「Max」になる。
省略時は16383文字まで受け付ける。
Tn
nに入力を待つ最大の秒数を指定する。小数も使用可能。(例:T5)
この秒数以上が経過すると、コマンドは終了し、ErrorLevelは「Timeout」になる。
タイムアウトしても、それまでに入力された文字列はOutputVarに格納される。
V
入力を乗っ取ってシステムから隠してしまわない。
通常は、入力を受け付けている間は、入力されたキーはほかのアプリケーションへは送られないが、このオプションを指定すると、普通にほかのアプリケーションに送られる。
*
入力文字列に対し、部分一致でMatchListとの一致判定を行う。通常は完全一致。
たとえば、MatchListに「age」を指定した場合、通常は「age」と入力するとマッチになるが、「*」オプションをつけると「sage」と入力してもマッチするようになる。
OutputVarには入力された文字列すべてが格納される。
EndKeys 入力を終了させるキー。
このキーが押されると、コマンドの実行が終了し、ErrorLevelに「Endkey:押されたキー名」が代入される。
Sendコマンドで使用するようなフォーマットで文字や特殊キー名を列挙する。
Ctrlキーなどの修飾キーを指定するときは、「{LCtrl}」のように左右を明示指定する必要がある。
MatchList ,」で区切って文字列を列挙する。
入力内容がここに列挙したものに一致した場合、コマンドは終了しErrorLevelが「Match」になる。
カンマ区切りだが、引数の区切りとは扱いが違い、カンマの前後の空白文字などは、文字列の一部とみなされる。
変数の内容は展開されてから、カンマで分割される。リストが長くなる場合は、変数に格納しておくとよい。
文字列中でカンマをあらわすには、2つのカンマの連続(,,)を使用する。

ErrorLevel

1 or 0

すべての引数を省略して実行した場合、割り込みにより停止中のスレッドで実行されているInputコマンドを終了させたら「0」、停止させるInputコマンドがなかったら「1」になる。
NewInput 割り込んだスレッドが新しいInputコマンドを実行した
Max 入力がオプションの「L」で指定した長さを超え、MatchListで指定した文字列にはマッチしなかった
Timeout オプションの「T」で指定したタイムアウト時間が経過した
Match MatchListで指定した文字列にマッチした
EndKey:name Endkeysに列挙された終了キーが押された場合。
Endkey:」に続きそのキー名が格納される。
例えば、「Endkey:Enter」。

Remarks

このコマンドを使用すると、キーボードによる入力を監視して、入力されたテキストをOutputVarに格納することができる。
入力の監視はEndkeysで指定されたキーが押されるか、Lオプションで指定した文字数に達するか、Tオプションで指定した時間が経過するか、MatchListで指定されている文字列に入力が一致すると終了し、終了理由がErrorLevel変数に格納される。

入力を待っている間は、ホットキーやメニューなどで新たなスレッドが割り込むことが可能。
割り込んできたスレッドで新たにInputコマンドが実行されると、割り込まれたInputコマンドはErrorLevelが「NewInput」となって終了する。
Inputコマンドを引数なしで実行すると、既存のInputコマンドの終了のみが行われる。

このコマンドが最初に実行されたとき、キーボードフックが有効化される。
それ以降は、スクリプトが常駐状態になり、ExitAppコマンドを実行するまで終了しなくなる。

ホットストリングの機能を使うと、簡単に特定のキーストロークに対して動作を割り当てることができる。

Related

KeyWait, InputBox, #InstallKeybdHook, Threads, StringCaseSense

Example(s)

; 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