PostMessage(A)

指定されたウィンドウを作成したスレッドに関連付けられているメッセージキューにメッセージをポストします。この関数は、メッセージの処理の完了を待たずに制御を返します。

スレッドに関連付けられているメッセージキューにメッセージをポストするにはPostThreadMessage関数を使います。

BOOL PostMessageA(
    HWND   hWnd,    // window handle
    UINT   Msg,     // message code
    WPARAM wParam,  // wParam parameter
    LPARAM lParam   // lParam parameter
);

USER32.DLL

引数

hWnd

メッセージを受け取るウィンドウのハンドルを指定します。

0xFFFF (HWND_BROADCAST) を指定すると、システム上のすべてのトップレベルウィンドウにポストされます。これには、無効あるいは不可視の非所有ウィンドウ、オーバーラップウィンドウ、ポップアップウィンドウも含まれます。子ウィンドウにはメッセージはポストされません。

0 (NULL) を指定すると、dwThreadIdパラメータに現在のスレッドIDを設定してPostThreadMessage関数を呼び出した場合と同様に動作します。

Msg

ポストされるメッセージコードを指定します。

wParam

追加のメッセージ固有情報(ウィンドウプロシージャのwParamパラメータ)を指定します。

lParam

追加のメッセージ固有情報(ウィンドウプロシージャのlParamパラメータ)を指定します。

戻り値

成功すると0以外の値が返ります。

失敗すると0が返ります。拡張エラー情報を取得するには、GetLastError関数を使います。

解説

メッセージキューに格納されたメッセージは、そのスレッドがGetMessage関数またはPeekMessage関数を呼び出すことによってキューから取り出されます。

hWndパラメータにHWND_BROADCASTを指定して通信を行う場合は、RegisterWindowMessageを使用して、相互のアプリケーション間通信のためのユニークなメッセージを取得するべきです。

システムは、システムメッセージ(0からWM_USERまでの範囲)に対してマーシャリングを行います。それ以外のメッセージ(WM_USER以降)を別プロセスに送信する場合には、カスタムマーシャリングを行う必要があります。

非同期メッセージ関数(PostMessage, SendNotifyMessage, SendMessageCallback関数)でWM_USERよりも下の範囲のメッセージを渡す場合には、メッセージパラメータにポインタを含めることはできません。これは、メッセージ処理が行われる前に呼び出し側に処理が戻り、メッセージ受け取り側のスレッドがメモリブロックにアクセスする前に呼び出し側スレッドがそれを解放してしまう可能性があるためです。

PostMessage関数を使用してWM_QUITメッセージをポストすることはできません。これにはPostQuitMessage関数を使用してください。

Windows 2000/XP: 1つのメッセージキューに対して10000メッセージまでの制限があります。この制限を超える場合には、アプリケーションを再設計して、多くのシステムリソースが消費されるのを避けるようにするべきです。この制限を調整するには、次のレジストリキーを変更します。指定可能な値の最小値は4000です。

HKEY_LOCAL_MACHINE
SOFTWARE
Microsoft
Windows NT
CurrentVersion
Windows
USERPostMessageLimit

対応情報

Windows 95 以降 / Windows NT 3.1 以降