ウィンドウやGUIコントロールにウィンドウメッセージを送信する。(SendMessageは応答を待って結果を取得できる)
PostMessage, Msg [, wParam, lParam, Control, WinTitle, WinText, ExcludeTitle, ExcludeText] SendMessage, Msg [, wParam, lParam, Control, WinTitle, WinText, ExcludeTitle, ExcludeText]
引数名 | 説明 |
---|---|
Msg |
ウィンドウメッセージ番号。 一般的なメッセージの一覧については、WinAPI Database for VB Programmerのアルファベット順表示「W」の項あたりを参照。 |
wParam | メッセージの引数。0もしくは省略のときは0が送られる。 |
lParam | メッセージの引数 |
Control |
省略もしくは空白のときは、ウィンドウに直接メッセージが送られる。 それ以外の指定方法はウィンドウ指定の方法参照。 |
WinTitle | ウィンドウ指定の方法参照。 |
WinText | |
ExcludeTitle | |
ExcludeText |
成功すれば0、ウィンドウが見つからないなどの問題が発生すれば1
ウィンドウが見つからないなどの問題が発生すれば「FAIL」。
それ以外は、メッセージの戻り値(整数)。
メッセージの種類よっては、「reply」
Msg,wParam,lParam引数には0...4294967295の数値を指定する。
0xFFのように16進数で指定することも可能。
WM_SETTEXTなどでwParam,lParamに文字列を渡したい場合は、「SendMessage, 0xC, 0, "New Title"」のように引数を「"」で囲む。
変数の文字列を渡したい場合は、「SendMessage, 0xC, 0, &NewTitle」のように変数名の前に「&」を付けたものを指定する。
無闇にウィンドウメッセージを送信すると不具合が発生することがあるので注意して使うこと。
SendMessageコマンドは、メッセージを送信後最大5秒間応答を待つ。
5秒以内に応答がなかった場合、ErrorLevelは「FAIL」になる。
PostMessageコマンドはメッセージをウィンドウのメッセージキューに追加して即座に終了する。
WinTitleに「ahk_id 0xFFFF」を指定すると、存在する全てのウィンドウにメッセージを送信する。
Msgに「0x1A」(WM_SETTINGCHANGE)などを指定するときに使うとよい。
Message List, Message Tutorial, Automating Winamp, ControlSend, WinMenuSelectItem
; Turn Monitor Off: SendMessage, 0x112, 0xF170, 2,, Program Manager ; 0x112 is WM_SYSCOMMAND, 0xF170 is SC_MONITORPOWER. ; Note for the above: Use -1 in place of 2 to turn the monitor on. ; Use 1 in place of 2 to activate the display's "low power" mode.
; Start the user's chosen screen saver: SendMessage, 0x112, 0xF140, 0,, Program Manager ; 0x112 is WM_SYSCOMMAND, and 0xF140 is SC_SCREENSAVE.
; Scroll up by one line (for a control that has a vertical scroll bar): ControlGetFocus, control, A SendMessage, 0x115, 0, 0, %control%, A
; Scroll down by one line: ControlGetFocus, control, A SendMessage, 0x115, 1, 0, %control%, A
; This example asks Winamp which track number is currently active: SetTitleMatchMode, 2 SendMessage, 1024, 0, 120, - Winamp if ErrorLevel <> FAIL { ErrorLevel++ ; Winamp's count starts at "0", so adjust by 1. MsgBox, Track #%ErrorLevel% is active or playing. }