マウス / キーボードのコマンド

関連するコマンド

  • Hotkeys and Hotstrings
    • #HotkeyInterval
    • #HotkeyModifierTimeout
    • #Hotstring
    • #If
    • #IfTimeOut
    • #IfWinActive / Exist
    • #MaxHotkeysPerInterval
    • #MaxThreads
    • #MaxThreadsBuffer
    • #MaxThreadsPerHotkey
    • #MenuMaskKey
    • #UseHook
    • Hotkey
    • ListHotkeys
    • Suspend
  • #InstallKeybdHook
  • #InstallMouseHook
  • #KeyHistory
  • BlockInput
  • Click
  • ControlClick
  • ControlSend / ControlSendRaw
  • CoordMode
  • GetKeyState
  • KeyHistory
  • KeyWait
  • Input
  • MouseClick
  • MouseClickDrag
  • MouseGetPos
  • MouseMove
  • Send / SendRaw / SendInput / SendPlay / SendEvent
  • SendMode
  • SetDefaultMouseSpeed
  • SetKeyDelay
  • SetMouseDelay
  • SetNumScrollCapsLockState
  • SetStoreCapslockMode

入力のシミュレート

Send

アクティブウィンドウに対する、キー入力やマウス クリックをシミュレートできます。

メニューを操作することが目的ならば、それ専用のWinMenuSelectItemコマンドがあります。

Send, Keys
Send/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}

downupを続けて記述することで、そのキーを押したままや離した状態に維持できます。このとき押し下げたキーを離さないと、スクリプトの終了後もそのキーが押し下げられたままとなります。

Send, {b down}{b up}
Send, {Ctrl down}
Send, {Ctrl up}

{Blind}abcとすると、修飾キーの状態が維持されたままabcが送信されます。Send - Syntax & Usage | AutoHotkey

AutoScriptWriterで操作を記録することで、複雑なキー入力のスクリプトを簡単に作成できます。ただしそのスクリプトを使用するときは適宜にSleepをいれ、タイミングを調整するようにします。

ControlSend

指定のウィンドウやコントロールに対する、キー入力をシミュレートできます。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

マウスボタンやマウスホイールのクリックイベントを、コントロールに送れます。このコマンドではイベントを直接送るため、マウスポインタは移動しません。

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で、クリックするボタンを以下の値で指定します。

  • LEFT
  • RIGHT
  • MIDDLE
  • X1
  • X2
  • WheelUp (またはWU)
  • WheelDown (またはWD)
  • WheelLeft (またはWL) (Windows Vista以降)
  • WheelRight (またはWR) (Windows Vista以降)

Optionsで、その他の設定を指定します。

  • NA … 確実性を向上させる
  • D … ボタンを押したままで離さない
  • U … ボタンを離す
  • Pos …
  • Xn …
  • Yn …

Click

マウスポインタを移動し、そこをクリックできます。このコマンドではパラメータの順番は無関係で、パラメータの内容によってその機能が変わります。

書式 機能
Click
現在位置を、左クリック
Click x, y
指定位置を、左クリック
Click WhichButton x, y
指定位置を、指定ボタンでクリック
Click ClickCount
現在位置で、左クリックを指定回数くり返す
Click down
現在位置で、左ボタンを押し下げたままとする
Click Relative x, y
現在位置から指定量だけオフセットした位置を、左クリック
Click

このコマンドでの座標はCoordModeでの設定に依存するため、これをウィンドウ座標に限定したければControlClickを用います。

MouseClick

マウスポインタを移動し、そこをクリックできます。

MouseClick [, WhichButton , X, Y, ClickCount, Speed, D|U, R]
MouseClick

WhichButtonには次の値を指定でき、省略した場合はLeftとなります。

  • Left (default)
  • Right
  • Middle
  • X1
  • X2

XYの座標系は、CoordModeの設定に依存します。ただし最後のパラメータのRを指定した場合はそれは無視され、現在位置からのオフセット量と見なされます。

MouseClick, , 10, 20

ClickCountを省略した場合は1となります。Speedは0~100の範囲で指定でき、値が小さい方が高速です。省略した場合は既定値の2かSetDefaultMouseSpeedで設定されている値となります。

このコマンドよりClickの方が、柔軟で簡単に扱えます。

MouseMove

マウスポインタを移動できます。

MouseMove, X, Y [, Speed, R]
MouseMove

パラメータの意味はMouseClickと同じです。

状態取得

CoordMode

各種コマンドの座標モードを設定できます。

CoordMode,
    ToolTip|Pixel|Mouse|Caret|Menu
    [, Screen|Window|Client]
CoordMode

第1パラメータで適用対象のコマンドを指定し、第2パラメータで座標モードを設定します。

第1パラメータ
キーワード 適用されるコマンドまたは変数
ToolTip ToolTip
Pixel PixelGetColor, PixelSearch、ImageSearch
Mouse MouseGetPos、 ClickMouseMove、MouseClick, MouseClickDrag
Caret 組み込み変数のA_CaretX、A_CaretY
Menu MenuコマンドのShow
第2パラメータ
キーワード 座標系 基準
Screen スクリーン座標 デスクトップ (スクリーン全体) が基準
Window (Relative) ウィンドウ座標 アクティブなウィンドウが基準
Client クライアント座標 アクティブなウィンドウのクライアント領域が基準。クライアント領域とは、ウィンドウのタイトルバーやメニュー、それに境界を除いた部分。

このコマンドによる設定はホットキーなどで起動されるスレッド内でのみ有効なため、全体の設定とするには自動実行セクション内に記述します。

GetKeyState

キーボードマウスのボタンとジョイスティックの状態を取得できます。

GetKeyState,
    OutputVar,
    KeyName
    [, Mode ]
GetKeyState

取得対象を、ホットキーで使用する名前を用いてKeyNameで指定します。そうするとOutputVarで、キーの状態が返されます。それは押されているならば「D」、押されていなければ「U」となります。

Modeで取得方法を指定できます。

  • P … 物理的な状態を取得する。たとえば、ユーザーが実際にボタンを押し下げているかどうか。
  • T … トグル状態を取得する。これはCapslock、Numlock、ScrolllockやInsertが対象。
GetKeyState, state, Escape
if( state = "D" )
    break

MouseGetPos

現在のマウスポインタの位置を取得できます。オプションで、その位置にあるウィンドウやコントロールも取得できます。

MouseGetPos,
    [OutputVarX,
    OutputVarY,
    OutputVarWin,     ; ウィンドウのIDを格納する変数名
    OutputVarControl, ; コントロールのClassNNを格納する変数名
    1|2|3]
MouseGetPos

座標は既定ではウィンドウ座標で返されます。これを他の座標系とするには、先にCoordModeで設定を変更します。

末尾のパラメータで、OutputVarControlで取得する対象を変更できます。

  • 0 … 既定の方法でOutputVarControlを決定し、コントロールのClassNNを格納する
  • 1 … より簡素な方法でOutputVarControlを決定する。この方法はMDIアプリケーションのアクティブまたは最上位の子ウィンドウを取得できる
  • 2 … ClassNNではなく、コントロールのHWNDを格納する
  • 3 … 上記1と2の組み合わせ

AutoHotKeyの設定

BlockInput

キーボードとマウスからの、操作の有効/無効を設定できます。

BlockInput, Mode
BlockInput
Modeの値
分類 定数 説明
モード1 On キーボードとマウスからの操作を無効とする
Off 操作を有効にする
モード2 Send SendまたはSendRawの処理時に、キーボードとマウスからの操作を無効とする
Mouse ClickMouseMove、MouseClickまたはMouseClickDragの処理時に、キーボードとマウスからの操作を無効とする
SendAndMouse 上記SendとMouseの2つを有効とする
Default 上記SendとMouseの2つを無効とする
モード3 MouseMove マウスポインタの移動を無効とする
MouseMoveOff マウスポインタの移動を有効とする

モード2とモード3は、それぞれほかのモードから独立して機能します。

スクリプトが終了すると、操作は再び有効となります。ただしMouseMoveだけは例外で、スクリプト終了後も自動では有効となりません。よって予期せずポインタの移動ができなくなってしまったときには、キーボードから操作してAutoHotKeyを終了させます。具体的にはCtrl + Alt + Delでタスクマネージャーを起動して、プロセスにあるAutoHotkey.exeを終了させます。