アクティブウィンドウに対する、キー入力やマウス クリックをシミュレートできます。
メニューを操作することが目的ならば、それ専用のWinMenuSelectItemコマンドがあります。
Send, KeysSend/SendRaw/SendInput/SendPlay/SendEvent: Send keys & clicks
Keysで送信するキーを指定します。印刷可能なキーはそのまま記述し、それ以外の制御文字などのキーはその名前をかっこで囲んで記述します。具体的な記述法については、Key Names - Send keys & clicksの表にあります。
Keysを大文字で記述すると、Shiftキーも同時に送信されます。つまりSend,Aは、Send,+aの意味となります。
複数のキーを続けて記述することで、それらを連続して送信します。
Send, abc
Send, {TAB}{ENTER}
Send, !fs ; Alt+fの後にs
かっこで囲んで数値を指定することで、そのキー入力を指定回数くり返します。
Send, {a 5} ; aaaaa
Send, {DEL 3} ; {DEL}{DEL}{DEL}
Send, +{TAB 3} ; +{TAB}+{TAB}+{TAB}
down、upを続けて記述することで、そのキーを押したままや離した状態に維持できます。このとき押し下げたキーを離さないと、スクリプトの終了後もそのキーが押し下げられたままとなります。
Send, {b down}{b up}
Send, {Ctrl down}
Send, {Ctrl up}
{Blind}abcとすると、修飾キーの状態が維持されたままabcが送信されます。Send - Syntax & Usage | AutoHotkey
AutoScriptWriterで操作を記録することで、複雑なキー入力のスクリプトを簡単に作成できます。ただしそのスクリプトを使用するときは適宜にSleepをいれ、タイミングを調整するようにします。
指定のウィンドウやコントロールに対する、キー入力をシミュレートできます。Sendはつねにアクティブなウィンドウを対象としますが、ControlSendはキーを送信する対象を指定できます。
ControlSend
[, Control, ; 対象とするコントロール
Keys,
WinTitle,
WinText, ; ウィンドウに含まれるテキスト
ExcludeTitle, ; 除外対象とする、ウィンドウのタイトルに含まれるテキスト
ExcludeText ] ; 除外対象とする、ウィンドウに含まれるテキスト
ControlSend / ControlSendRaw
ControlでClassNNまたはコントロールのテキストを指定します。これをahk_parentとすると、コントロールの親ウィンドウに直接キー入力を送ります。Keysの指定は基本的にSendと同じで、それは次のようなものです。
ControlSend, , !{SPACE}, cmd.exe
ControlSend, 検索, {SPACE}
キー入力に対応していないコントロールはこのコマンドからは操作できないため、ControlClickを用います。
Sendと異なり、マウス クリックのシミュレートはできません。そのような目的にはControlClickを使用します。
DetectHiddenWindowsをOnにしていないと、表示されていないウィンドウへはキーを送信できません。
マウスボタンやマウスホイールのクリックイベントを、コントロールに送れます。このコマンドではイベントを直接送るため、マウスポインタは移動しません。
ControlClick
[, Control-or-Pos,
WinTitle,
WinText,
WhichButton,
ClickCount,
Options,
ExcludeTitle,
ExcludeText ]
ControlClick
Control-or-Posで、イベントを送る対象を指定します。
| Mode 1 | x、yの相対座標で指定します。その基準は対象ウィンドウの左上で、X100 Y200の書式です。
ControlClick, x100 y200 |
| Mode 2 | コントロールのClassNN
ControlClick, Button1 |
コントロールに表示されているテキスト
ControlClick, OK |
何も指定しないと、対象ウィンドウの最上位のコントロールがクリックされます。
コントロールのClassNNやテキストはWindow Spyで調べられます。それで調べられないときはMode 2ではイベントを送れないため、Mode 1の方法で座標を指定します。
WhichButtonで、クリックするボタンを以下の値で指定します。
Optionsで、その他の設定を指定します。
マウスポインタを移動し、そこをクリックできます。このコマンドではパラメータの順番は無関係で、パラメータの内容によってその機能が変わります。
| 書式 | 機能 |
|---|---|
Click |
現在位置を、左クリック |
Click x, y |
指定位置を、左クリック |
Click WhichButton x, y |
指定位置を、指定ボタンでクリック |
Click ClickCount |
現在位置で、左クリックを指定回数くり返す |
Click down |
現在位置で、左ボタンを押し下げたままとする |
Click Relative x, y |
現在位置から指定量だけオフセットした位置を、左クリック |
このコマンドでの座標はCoordModeでの設定に依存するため、これをウィンドウ座標に限定したければControlClickを用います。
クリックする対象がコントロールであり、そのClassNNやテキストを読み取れるのならばControlClickを用います。
マウスポインタを移動し、そこをクリックできます。
MouseClick [, WhichButton , X, Y, ClickCount, Speed, D|U, R]MouseClick
WhichButtonには次の値を指定でき、省略した場合はLeftとなります。
X、Yの座標系は、CoordModeの設定に依存します。ただし最後のパラメータのRを指定した場合はそれは無視され、現在位置からのオフセット量と見なされます。
MouseClick, , 10, 20
ClickCountを省略した場合は1となります。Speedは0~100の範囲で指定でき、値が小さい方が高速です。省略した場合は既定値の2かSetDefaultMouseSpeedで設定されている値となります。
このコマンドよりClickの方が、柔軟で簡単に扱えます。
マウスポインタを移動できます。
MouseMove, X, Y [, Speed, R]MouseMove
パラメータの意味はMouseClickと同じです。
各種コマンドの座標モードを設定できます。
CoordMode,
ToolTip|Pixel|Mouse|Caret|Menu
[, Screen|Window|Client]
CoordMode
第1パラメータで適用対象のコマンドを指定し、第2パラメータで座標モードを設定します。
| キーワード | 適用されるコマンドまたは変数 |
|---|---|
| ToolTip | ToolTip |
| Pixel | PixelGetColor, PixelSearch、ImageSearch |
| Mouse | MouseGetPos、 Click、MouseMove、MouseClick, MouseClickDrag |
| Caret | 組み込み変数のA_CaretX、A_CaretY |
| Menu | MenuコマンドのShow |
| キーワード | 座標系 | 基準 |
|---|---|---|
| Screen | スクリーン座標 | デスクトップ (スクリーン全体) が基準 |
| Window (Relative) | ウィンドウ座標 | アクティブなウィンドウが基準 |
| Client | クライアント座標 | アクティブなウィンドウのクライアント領域が基準。クライアント領域とは、ウィンドウのタイトルバーやメニュー、それに境界を除いた部分。 |
このコマンドによる設定はホットキーなどで起動されるスレッド内でのみ有効なため、全体の設定とするには自動実行セクション内に記述します。
キーボード、マウスのボタンとジョイスティックの状態を取得できます。
GetKeyState,
OutputVar,
KeyName
[, Mode ]
GetKeyState
取得対象を、ホットキーで使用する名前を用いてKeyNameで指定します。そうするとOutputVarで、キーの状態が返されます。それは押されているならば「D」、押されていなければ「U」となります。
Modeで取得方法を指定できます。
GetKeyState, state, Escape
if( state = "D" )
break
現在のマウスポインタの位置を取得できます。オプションで、その位置にあるウィンドウやコントロールも取得できます。
MouseGetPos,
[OutputVarX,
OutputVarY,
OutputVarWin, ; ウィンドウのIDを格納する変数名
OutputVarControl, ; コントロールのClassNNを格納する変数名
1|2|3]
MouseGetPos
座標は既定ではウィンドウ座標で返されます。これを他の座標系とするには、先にCoordModeで設定を変更します。
末尾のパラメータで、OutputVarControlで取得する対象を変更できます。
キーボードとマウスからの、操作の有効/無効を設定できます。
BlockInput, ModeBlockInput
| 分類 | 定数 | 説明 |
|---|---|---|
| モード1 | On | キーボードとマウスからの操作を無効とする |
| Off | 操作を有効にする | |
| モード2 | Send | SendまたはSendRawの処理時に、キーボードとマウスからの操作を無効とする |
| Mouse | Click、MouseMove、MouseClickまたはMouseClickDragの処理時に、キーボードとマウスからの操作を無効とする | |
| SendAndMouse | 上記SendとMouseの2つを有効とする | |
| Default | 上記SendとMouseの2つを無効とする | |
| モード3 | MouseMove | マウスポインタの移動を無効とする |
| MouseMoveOff | マウスポインタの移動を有効とする |
モード2とモード3は、それぞれほかのモードから独立して機能します。
スクリプトが終了すると、操作は再び有効となります。ただしMouseMoveだけは例外で、スクリプト終了後も自動では有効となりません。よって予期せずポインタの移動ができなくなってしまったときには、キーボードから操作してAutoHotKeyを終了させます。具体的にはCtrl + Alt + Delでタスクマネージャーを起動して、プロセスにあるAutoHotkey.exeを終了させます。