PostMessage

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

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

パラメータ

MsgNumber

型:整数

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

wParam, lParam

型:整数

どちらかを省略したときは、0を送信します。そうでなければ、メッセージの1番目と2番目のコンポーネントを指定します。

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

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

Control

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

省略すると、メッセージはターゲットウィンドウの中のコントロールではなく、ウィンドウに直接ポストされます。そうでなければ、コントロールのClassNN、テキストまたはHWNDか、Hwndプロパティを持つオブジェクトを指定します。詳しくはControlパラメータをご覧ください。

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

WinTitle, WinText, ExcludeTitle, ExcludeText

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

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

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

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

エラー処理

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

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

備考

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

PostMessageは、ターゲットウィンドウに関連付けられたメッセージキューにメッセージを配置し、受信確認または応答することをを待ちません。一方、SendMessageは、タイムアウト時間が経過するまで、ターゲットウィンドウがメッセージを処理するのを待ちます。

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

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

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

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

SendMessageメッセージリストメッセージチュートリアルOnMessageWinampの自動化DllCallControlSendMenuSelect

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

PostMessage 0x0050, 0, 0x4090409,, "A"  ; 0x0050はWM_INPUTLANGCHANGEREQUESTです。