PostMessage(A)

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

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

BOOL PostMessageA(
    HWND   hWnd,    // ウィンドウハンドル
    UINT   Msg,     // メッセージコード
    WPARAM wParam,  // wParamパラメータ
    LPARAM lParam   // lParamパラメータ
);

USER32.DLL

引数

hWnd

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

0xFFFF (HWND_BROADCAST) を指定すると、システムにあるすべてのトップレベルウィンドウにポストされます。子ウィンドウに対してはメッセージはメッセージはポストされません。

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

Msg

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

wParam

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

lParam

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

戻り値

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

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

解説

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

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

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

WM_QUIT メッセージをポストするには PostMessage 関数ではなく PostQuitMessage 関数を使わなければなりません。

対応情報

Windows 95 以降 / Windows NT 3.1 以降