リファレンス‎ > ‎コマンド‎ > ‎

Send / SendRaw / SendEvent / SendInput / SendPlay

キーストロークやマウスクリックを発生させる

Send, Keys
SendRaw, Keys
SendInput, Keys
SendPlay, Keys
SendEvent, Keys

Parameters

引数名 説明
Keys キーストローク。SetKeyDelayで指定された間隔を空けながら入力される。
直接入力モード(SendRaw)
SendRaw を利用したときになる。
コマンドの引数は そのまま 送信される。{Enter} といった特殊キー表記は利用できない。
通常モードで {Raw}を記述するとそれ以降の部分がこのモードになる。
通常モード(Send)
{Enter} のように {} で囲まれた特殊キーや、 ^c のように修飾キーを表す文字が付いているような部分を特別な機能に置き換えてからキー送信を行う。
SendInput, SendPlay および SendEvent
上記の3コマンドは、Sendと機能は同じだが入力生成の実現方式が違う。
Sendコマンドは通常、SendEventと同様の方式を使用するが、SendModeコマンドを使用することでSendInputやSendPlayの方式に変更することができる。
それぞれのモードの違いなどは、SendModeのページ参照。

Remarks

修飾キー

修飾キーとは Ctrl や Shift のように単独では文字入力や制御など具体的な機能を持たないが、 他のキーとの組み合わせた時に何らかの機能を発揮させることが出来るキーのことをいう。 英語でモディファイアキー、モディファイアとも言われる。

キーが修飾キーと同時に押されたとするには、キー名の先頭に修飾キーを表す文字を付ける。修飾キーとそれを表す文字は以下の通り(ホットキー指定と同様)。

修飾キー一覧
^ Ctrlキー
! Altキー
+ Shiftキー
# Winキー

これらの文字は並べることで複数の修飾キーの同時押しがなされているものとすることも出来る。

大文字と小文字の区別

Send系のコマンドでは、引数として与えた文字列の大文字と小文字は厳密に区別される。

Send, ABC ; "ABC" と出力される
Send, abc ; "abc" と出力される

上例の二つの出力内容は、与えた文字列の大文字/小文字に依存する

特に注意すべき点は修飾キーと組み合わせた場合である。以下の例はキーを送ってコピーをさせる場合。

Send, ^C ; × 大文字の場合は仮想キーコードが異なるので動作しない
Send, ^c ; ○ 

キー名

英数字や、特別な意味を持たない記号は、そのまま記述すればよい。
Shiftを押しながら出てくる文字は、Shift+文字のキーが送信される。
その他のキーは、以下のように {}で囲んで指定する。

{vkXX}{vkXXscYYY}のようにして、仮想キーコードがXXのキーや、スキャンコードがYYYのキーを指定可能。

上記以外は特殊キー一覧を参照のこと。

キーリピート、およびキーの押し下げ、押し上げ

キーリピートを行うには以下のように {キー名 回数}と指定する。

Send, {Del 4}  ; [Delete]キーを4回押したことにする
Send, {S 30}   ; 大文字 "S" を30回押したことにする
Send, +{Tab 4} ; [Shift]+[Tab] を4回押したことにする

押し下げ押し上げは以下のように {キー名 Down} , {キー名 Up} と指定する。

Send {b down}{b up}       ; [B]キーを押して離す
Send {TAB down}{TAB up}   ; [Tab]キーを押して離す
Send {Up down}            ; [↑]キーを押したままにする
Sleep 1000                ; 1秒待って
Send {Up up}              ; [↑]キーを押下を解除する

このような方法でキーを押しっぱなしにした場合はキーリピートは発生しない。(物理的にキーボードを押しっぱなしにするとキーボードから、キー押下、キーリピート*N、キー解除の命令が来る)

これをAHKでエミュレートするには、以下の例を参考にすること。

Loop 20
{
    Send {Tab down}  ; キーリピートをキー押下としてキーを送る
    Sleep 30         ; キーリピート間隔を30msとする(またはSetKeyDelayを使う)
}
Send {Tab up}        ; キー押下を解除する

{Ctrl DownTemp}のようにすると上記同様にキー押下になるが、修飾キーの部分はキーリピートしていないように振る舞う。

修飾キーの自動復元

Sendコマンドが始まるとき、仮想的に修飾キーを離した状態になる。
コマンド終了時に、再びもとの状態に戻される。
この動作は、Keysの最初に {Blind}をつけることで無効化できる。

キーボードフックが使われている場合、物理的な押し下げ状態と同じ状態に復元されるが、フックが使用されていない場合、指定時間が経過していれば復元は行わず、指定時間が経過していなければSendコマンド開始前の状態に復元される。
このときの指定時間は#HotkeyModifierTimeout指令で設定可能。

特殊記号のエスケープとエスケープの不要なSendRawコマンド

修飾キーを指定する記号や { }などは、 {{}}のように {}で囲めば入力できる。
SendRawコマンドは、修飾キーや特殊キー名を解釈せず、Keys引数のテキストをそのままタイプするので、これらの記号をエスケープする必要がなくなる。

通常のSendコマンドおよびControlSendコマンドでは、Keysに {Raw}が含まれると、それ以降がSendRawと同じように修飾キーや特殊キー名を解釈せずに送られるようになる。

特殊キー名一覧

下表は大文字で表記されているが、基本的に大文字小文字はどちらで記述してもよい(混在も可)。 表の左が特殊キー名、右側が実際に発行される内容である。

特別な意味を持つ文字キーのエスケープ
{!} !
{#} #
{+} +
{^} ^
{{} {
{}} }
特殊キー
{F1} ~ {F24} ファンクションキー
{Enter} Enterキー
{Escape}, {Esc} ESCAPE
{Space} SPACE(引数の最初や最後以外は、普通に半角スペースでよい。)
{Tab} TAB
{Backspace} , {BS} Backspace
{Delete}, {Del} Delete
{Insert}, {Ins} Insert
{Up} 矢印キーの上
{Down} 矢印キーの下
{Left} 矢印キーの左
{Right} 矢印キーの右
{Home} Home
{End} End
{PgUp} PageUp
{PgDn} PageDown
{AppsKey} アプリケーションキー(コンテキストメニューが出たりする奴)
{Sleep} SLEEP
{PrintScreen} PRINTSCR
{CtrlBreak} Ctrl+break
{Pause} PAUSE
Lock系
{CapsLock} CapsLockキー(SetCapsLockStateで確実に状態を制御できる(NT系のみ))
{ScrollLock} ScrollLock
{NumLock} NumLock
修飾キー
{Control}, {Ctrl} Ctrlキー
{LControl}, {LCtrl} 左のCtrlキー
{RControl}, {RCtrl} 右のCtrlキー
{ControlDown}, {CtrlDown} Ctrlキーを押し下げ状態にする。左右を明示的に指定するには、 {RCtrl Down}のようにする。
{ControlUp}, {CtrlUp} 押し下げ状態を解除する
{Alt} ALT
{LAlt} 左Alt
{RAlt} 右Alt
{AltDown} Altキーを押し下げ状態にする。
{Shift} SHIFT
{LShift} 左Shift
{RShift} 右Shift
{ShiftDown} Shiftキーを押し下げ状態にする
{LWin} 左Windowsキー
{RWin} 右Windowsキー
{LWinDown} 左Windowsキーを押し下げ状態にする
{RWinDown} 右Windowsキーを押し下げ状態にする
テンキー
{Numpad0}{Numpad9} テンキーの数字キー
{NumpadDot} テンキーの .
{NumpadEnter} テンキーの Enter
{NumpadMult} テンキーの *
{NumpadDiv} テンキーの / 
{NumpadAdd} テンキーの  +
{NumpadSub} テンキーの -
{NumpadDel} テンキーの Del (これ以降は数値部分でNumLockがOffの場合のみ)
{NumpadIns} テンキーの Ins
{NumpadClear} テンキーの Clear (普通は 5 の位置になる)
{NumpadUp} テンキーの ↑
{NumpadDown} テンキーの ↓
{NumpadLeft} テンキーの ←
{NumpadRight} テンキーの →
{NumpadHome} テンキーの Home
{NumpadEnd} テンキーの End
{NumpadPgUp} テンキーの PgUp
{NumpadPgDn} テンキーの PgDn
多機能キーボードの特殊キー
{BROWSER_BACK} 2000/XP以降: マルチメディアキーの「戻る」ボタン。
{BROWSER_FORWARD} 2000/XP以降: マルチメディアキーの「進む」ボタン。
{BROWSER_REFRESH} 2000/XP以降: マルチメディアキーの「更新」ボタン。
{BROWSER_STOP} 2000/XP以降: マルチメディアキーの「中止」ボタン。
{BROWSER_SEARCH} 2000/XP以降: マルチメディアキーの「検索」ボタン。
{BROWSER_FAVORITES} 2000/XP以降: マルチメディアキーの「お気に入り」ボタン。
{BROWSER_HOME} 2000/XP以降: マルチメディアキーの「ホーム」ボタン。
{VOLUME_MUTE} 2000/XP以降: マルチメディアキーの「ミュート」ボタン。
{VOLUME_DOWN} 2000/XP以降: マルチメディアキーの「音量小」ボタン。
{VOLUME_UP} 2000/XP以降: マルチメディアキーの「音量大」ボタン。
{MEDIA_NEXT} 2000/XP以降: マルチメディアキーの「次の曲」ボタン。
{MEDIA_PREV} 2000/XP以降: マルチメディアキーの「前の曲」ボタン。
{MEDIA_STOP} 2000/XP以降: マルチメディアキーの「再生停止」ボタン。
{MEDIA_PLAY_PAUSE} 2000/XP以降: マルチメディアキーの「再生一時停止」ボタン。
{LAUNCH_MAIL} 2000/XP以降: マルチメディアキーの「メール」ボタン。
{LAUNCH_MEDIA} 2000/XP以降: マルチメディアキーの「メディア」ボタン。
{LAUNCH_APP1} 2000/XP以降: マルチメディアキーの「アプリ1」ボタン。
{LAUNCH_APP2} 2000/XP以降: マルチメディアキーの「アプリ2」ボタン。
直接指定
{ASC nnnnn} キーボードに無い文字を入力する。nnnnnには文字コードを10進数で指定する。
1...255でASCIIコード、0128...0255でANSIコード、256...65535でUnicodeを指定可能。
原文にはUnicodeと書いてあったが、ShiftJISコードを指定したら日本語のコードを入力できた。

内部的には、Altを押しながらテンキーの数字を送信している。
{vkXX}, {vkXXscYYY} 仮想キーコードXX、スキャンコードYYYのキーを送信する。
XXとYYYは16進数。
YYYを省略した場合、仮想キーコードに設定されたデフォルトのスキャンコードになる。
AutoHotkeyウィンドウメニューの ViewKey historyでキーコードを表示可能。
{U+nnnn} AHKL
コード指定でユニコード文字を出力する。
nnnnには文字コードをユニコード16進形式で指定する(接頭辞の0x等は不要)。
Send, {U+3042}」は「あ」になる。
直接文字指定
(あ漢 etc.)
AHKL ユニコード版専用(ANSI版では未サポート)
ユニコード文字を直接出力する。
Send, あいうえお漢字」 のように直接指定する。

注意: この機能はIMEのユニコード文字出力機能を利用するので、全角文字を出力するとIMEが必ずにONになる。
また、ユニコード文字出力機能を持たないIME(Google日本語入力など)を利用しているときは、この方法を利用しても何も出力されない。

全角文字を利用する場合でIME状態を維持したい場合は、 IME.ahk等のライブラリを利用して事前にIME状態を調べて後から復元するといった手法を採る必要がある。なお、必ず半角で良い場合は以下のように全角/半角を最後にSendすることで代替できる。
Send, あいうえお{vkF4}
マウスボタン
{LButton}
{RButton}
{MButton}
{XButton1}
{XButton2}
{WheelDown}
{WheelUp}
{WheelLeft}
{WheelRIght}
各マウス操作を送信する。現在のカーソル位置での操作となる。

WheelLeft, WheelRight は Vista 以降でサポート。 
{Click[, options]} クリック操作を行う。
Optionsの書式などは、Clickコマンドと同じ。

Related

SetKeyDelay, SetStoreCapslockMode, ControlSend, WinActivate

Example(s)

Send, Sincerely,{enter}John Smith
Send, !fs ; Select the File->Save menu (Alt+F followed by S).
Comments