PostMessage

ウィンドウまたはコントロールのメッセージキューにメッセージを配置します。

PostMessage MsgNumber , wParam, lParam, Control, WinTitle, WinText, ExcludeTitle, ExcludeText

パラメータ

MsgNumber

型:整数

送信するメッセージ番号です。メッセージリストを参照して番号を決定してください。

wParam, lParam

型:整数

If either is omitted, 0 will be sent. Otherwise, specify the first and second component of the message.

各パラメータは整数値でなければなりません。

AutoHotkeyまたはターゲットウィンドウが32ビットの場合、パラメータの下位32ビットのみが使用されます。つまり、符号付き値の場合は-2147483648~2147483647(-0x80000000~0x7FFFFFFF)、符号なし値の場合は0~4294967295(0xFFFFFF)範囲外の場合は値が切り捨てられます。AutoHotkeyとターゲットウィンドウの両方が64ビットである場合、AutoHotkeyがサポートする任意の整数値を使用することができます。

Control

型:文字列整数またはオブジェクト

If omitted, the message will be posted directly to the target window rather than one of its controls. Otherwise, specify the control's ClassNN, text or HWND, or an object with a Hwnd property. 詳しくは、「制御パラメータ」をご覧ください。

本パラメータでHWND(整数またはオブジェクト)を指定する場合、コントロール(子ウィンドウ)のHWNDであることは必須ではありません。つまり、トップレベルウィンドウのHWNDにもなり得るのです。

WinTitle、WinText、ExcludeTitle、ExcludeText

型:文字列整数またはオブジェクト

もしこれらの項目が未設定または省略されたときは、最後に見つかったウィンドウが使用されます。そうでないときは、WinTitleウィンドウタイトルまたはターゲットウィンドウを識別するための他の基準、および/またはWinTextにターゲットウィンドウの単一のテキスト要素からの部分文字列(付属のWindow Spyユーティリティを使えばわかります)を指定します。

ExcludeTitleExcludeTextはウィンドウのタイトルまたはテキストで除外するために使用します。指定の仕方はWinTitleWinTextに似ていますが、ExcludeTitleはウィンドウのタイトル以外の基準(ウィンドウクラスやHWNDなど)を認識しません。

ウィンドウのタイトルとテキストは大文字と小文字を区別します。DetectHiddenWindows関数 と DetectHiddenText関数で変更しない限り、初期設定では非表示ウィンドウは検出されず、非表示テキストは検出されます。SetTitleMatchMode関数で変更しない限り、初期設定ではウィンドウのタイトルはその中のどこかにWinTitleまたはExcludeTitleを含んでいれば一致します。

エラー処理

ウィンドウまたはコントロールが見つからないときは、TargetErrorがスローされます。

メッセージを投稿できなかった場合、OSErrorがスローされる。例えば、ターゲットウィンドウがスクリプトよりも高い整合性レベルで実行されている場合(スクリプトは管理者として実行されているが、スクリプトはそうではない)、メッセージがブロックされることがあります。

備考

誤ったウィンドウにメッセージを送信したり、無効なメッセージを送信したりすると、予期せぬ動作が発生したり、ターゲットアプリケーションがクラッシュしたりする可能性があるため、この関数は慎重に使用しなければなりません。これは、ほとんどのアプリケーションが、外部ソースからのある種のメッセージを期待するように設計されていないためです。

PostMessage places the message in the message queue associated with the target window and does not wait for acknowledgement or reply. 一方、SendMessageは、タイムアウト時間が経過するまで、ターゲットウィンドウがメッセージを処理するのを待ちます。

SendMessageとは異なり、PostMessageは通常、基本的な数値のみを送信し、構造体や文字列へのポインタは送信しません。

非表示や無効になっているものも含め、システム内のすべてのウィンドウにメッセージを送るには、WinTitleに 0xFFFFを指定します(0xFFFFはHWND_BROADCAST)。このテクニックは、放送を目的としたメッセージにのみ使用されるべきです。

スクリプトにメッセージを受信させるには、OnMessageを使用します。

この機能の使い方については、「メッセージチュートリアル」を参照してください。

SendMessage, Message List, Message Tutorial, OnMessage, Automating Winamp, DllCall, ControlSend, MenuSelect

アクティブウィンドウのキーボードレイアウト/言語を英語(US)に切り替えます。

PostMessage 0x0050, 0, 0x4090409,, "A"  ; 0x0050 is WM_INPUTLANGCHANGEREQUEST.