PostMessage
指定されたウィンドウを作成したスレッドに関連付けられているメッセージキューに、1 つのメッセージをポストします(書き込みます)。対応するスレッドがメッセージを処理するのを待たずに制御を返します。
任意のスレッドに関連付けられているメッセージキューに 1 つのメッセージをポストするには、PostThreadMessage 関数を使ってください。
BOOL PostMessage( HWND hWnd, // ポスト先ウィンドウのハンドル UINT Msg, // メッセージ WPARAM wParam, // メッセージの最初のパラメータ LPARAM lParam // メッセージの 2 番目のパラメータ );
パラメータ
- hWnd
- 1 つのウィンドウのハンドルを指定します。このウィンドウのウィンドウプロシージャは、ポストされたメッセージを受信します。次の値には、特別な意味があります。
値 意味 HWND_BROADCAST システム内のすべてのトップレベルウィンドウへメッセージをポストします。無効になっている所有されていないウィンドウ、不可視の所有されていないウィンドウ、オーバーラップされた(手前にほかのウィンドウがあって覆い隠されている)ウィンドウ、ポップアップウィンドウもポスト先になります。子ウィンドウへはメッセージをポストしません。 NULL PostMessage 関数は、dwThreadId パラメータで現在のスレッドの識別子を指定して PostThreadMessage 関数を呼び出した場合と同じ動作をします。
- Msg
- ポストするべきメッセージを指定します。
- wParam
- メッセージ特有の追加情報を指定します。
- lParam
- メッセージ特有の追加情報を指定します。
戻り値
関数が成功すると、0 以外の値が返ります。
関数が失敗すると、0 が返ります。拡張エラー情報を取得するには、 関数を使います。
解説
GetMessage または PeekMessage 関数を呼び出すと、1 つのメッセージキューの中のメッセージを取得できます。
HWND_BROADCAST フラグを使って通信を行う必要がある複数のアプリケーションは、アプリケーション間通信の専用メッセージを取得する目的では、RegisterWindowMessage 関数を呼び出すべきです。
非同期メッセージ関数(PostMessage、SendNotifyMessage、SendMessageCallback の各関数)を使って、WM_USER 未満のメッセージ(メッセージの値が 0x8000 未満)を送信する場合は、メッセージのパラメータでポインタを使うことはできません。もしポインタを使っている場合、その操作は失敗します。PostMessage 関数は、受信側スレッドがそのメッセージを処理する前に制御を返します。そのため、受信側スレッドがメッセージの処理を開始する前に、送信側スレッドは、ポインタが指すメモリを解放してしまいます。メッセージの値の一覧については、MSDN ライブラリの「WM_APP」を参照してください。
PostMessage 関数を使って メッセージをポストすることは避けてください。代わりに、PostQuitMessage 関数を使ってください。
Windows 2000:1 つのメッセージキューに一度に存在できるポスト済みメッセージの数は、既定では最大 10,000 個です。この上限は、十分大きい値にしておくべきです。もしアプリケーションがこの上限を超えてしまう場合、それほど多くのシステムリソースを消費することがないよう、そのアプリケーションを設計し直すべきです。代わりに、この上限を変更するには、次のレジストリエントリを変更してください(このレジストリエントリが登録されていない場合、[編集]-[値の追加]を選択し、データ型として REG_DWORD を指定し、10 進数を入力してください)。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\USERPostMessageLimit.
このレジストリエントリで指定できる最小の値は、4,000 です。レジストリエディタを使って値を入力する際は、カンマ(,)なしで入力してください。
対応情報
Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダー:Winuser.h 内で宣言、Windows.h をインクルード
インポートライブラリ:User32.lib を使用
Unicode:Windows NT/2000 は Unicode 版と ANSI 版を実装
参照
GetMessage, PeekMessage, PostQuitMessage, PostThreadMessage, RegisterWindowMessage, SendMessageCallback, SendNotifyMessage
