SendMode

提供: AutoHotkey Wiki
移動: 案内検索

実行制御 | GUI表示 | 演算・変数 | メモリ・DLL操作 | 文字列操作 | キーボード | マウス | シェル | ウィンドウ | ウィンドウグループ
ステータスバー | コントロール | サウンド | ファイル | INIファイル | レジストリ | 環境変数 | AutoHotkey | その他 | 設定関係 | オブジェクト

SendMode [v1.0.43+][編集]

Send、SendRaw、ClickコマンドおよびMouse系コマンドの処理方式を変更する。

SendMode, Mode

Parameters[編集]

引数名 説明
Mode 以下のどれかを指定。
各方式の詳しい特徴は後述。
Event WindowAPIのkeybd_event、mouse_eventを利用して一つずつイベントを生成する方式。
Input WindowsAPIの SendInput関数を利用してシステムに一連の操作イベントをまとめて送り込む方式。
他のプログラムがキーフックを利用していると性能が低下する。
この方式が利用できない状況では、代わりにEventモードが使用される。
Play JournalPlaybackを利用して一連の操作イベントを再生させる方式。
ゲームなどのプログラムをより確実に操作できる。
InputThenPlay Inputモードが利用できればInputモード、利用できなければPlayモードになるようにする。

Eventモード[編集]

一定の間隔を開けながら、個々の操作イベントを生成する。
操作の再生中にユーザーが行った操作が割り込んでしまうことがある。
これを防ぐには、BlockInputコマンドでユーザーの操作を無効化しておけばよい。

操作の間隔は、SetKeyDelaySetMouseDelayコマンドで設定できる。

Inputモード[編集]

入力の再生速度が非常に速い。
このため、再生中に予期せぬウィンドウが現われて動作が妨げられると言ったことが防げる。
また、再生中にユーザーが行った操作は、再生終了後まで後回しにされる。

このモードでは、一度に行える操作の数は5000個程度までに制限されている。
これを超えた分は無視される。

他のプログラムが下位レベルキーフックを使用していると、Inputモードは性能が大きく低下してしまう。
このため、他のAutoHotkeyスクリプトがフックを利用している場合、Inputモードは自動的にEventモードに変更される。
また、Windows95/NTではこのモードは利用できず、同様にEventモードに変更される。

CoordMode,Mouse,Relativeでマウス操作の座標をアクティブウィンドウの左上からの相対座標として扱うように設定されているとき、Sendコマンド内の {Click}操作の基準座標はコマンドが開始した時点でのアクティブウィンドウの左上座標となる。
このため、途中でアクティブウィンドウが変わっていたりすると、期待通りの動作にならないことがある。
Sendコマンドを複数回に分けて、Clickの前にウィンドウの変化が生じない様にすれば、この問題は発生しない。

このモードでは、一切間を開けずに全ての操作が再生される。
SetKeyDelayコマンドで間隔を設定することはできない。
Inputモードが使用できずEventモードに変更された場合は、 SetKeyDelay,-1,0を指定したときの動作になる。
ただし、 SetKeyDelay,-1,-1が設定されている場合は、その設定に従う。

Playモード[編集]

Playモードでは、一連の操作がアクティブウィンドウに対して一遍に送り込まれる。
Inputモードよりは低速だが、 SetKeyDelay,-1,-1が設定されたEventモードよりは高速に動作する。
SetKeyDelay,10,10,Playのようにすれば、Eventモードと同様に各キー操作の間に一定の間隔を開けさせることができる。

再生中にユーザーが行った操作は、再生終了後まで後回しにされる。
ただし、Windowsキーを含むシステムのホットキーだけは動作するため、スタートメニューなどによりそうさが妨げられる場合がある。
AutoHotkeyがキーボードフックを使用している場合、自動的にWindowsキーが無効化され、誤動作を防止する。

PlayモードでWindowsキー(LWin,RWin)を押しても、Win+Rなどのホットキーは反応しない。
また、CapsLock、NumLock、ScrollLockキーのトグル状態を変更することもできない。

再生中にCtrl+Alt+DelやCtrl+Escが押されると、再生は途中で終了し、スクリプトの続きが実行される。

Playモードで生成したキーの押し下げ状態は、GetKeyStateなどで検出することができない。
スクリプト自身のウィンドウに送られたときだけは例外的に検出できるが、 RShiftなどのように修飾キーの左右を区別することはできない。

Remarks[編集]

Sendコマンドには、上記の3つのモードに対応するコマンドとして SendEvent SendInput SendPlayコマンドが用意されている。
これらのコマンドを利用することで、一時的にSendModeの設定とは別の方式で入力の生成を行える。
マウス操作も、 SendPlay,{Click}のようにして発生させられる。

いずれのモードも、特定のアプリケーションを上手く操作できない場合がある。
操作したいアプリケーションに応じて使い分ける必要がある。

この設定の基本値は、スクリプトの最初のAuto-executeセクションで設定する。
ホットキーなどで新たに起動されたスレッドでは、設定は基本値に設定される。

Related[編集]

Send, SetKeyDelay, SetMouseDelay, Click, MouseClick, MouseClickDrag, MouseMove

Example(s)[編集]

SendMode Input
SendMode InputThenPlay