指定されたウィンドウを作成したスレッドに関連付けられているメッセージキューにメッセージをポストします。この関数は、メッセージの処理の完了を待たずに制御を返します。
スレッドに関連付けられているメッセージキューにメッセージをポストするにはPostThreadMessage関数を使います。
BOOL PostMessageA( HWND hWnd, // window handle UINT Msg, // message code WPARAM wParam, // wParam parameter LPARAM lParam // lParam parameter );
USER32.DLL
メッセージを受け取るウィンドウのハンドルを指定します。
0xFFFF (HWND_BROADCAST) を指定すると、システム上のすべてのトップレベルウィンドウにポストされます。これには、無効あるいは不可視の非所有ウィンドウ、オーバーラップウィンドウ、ポップアップウィンドウも含まれます。子ウィンドウにはメッセージはポストされません。
0 (NULL) を指定すると、dwThreadIdパラメータに現在のスレッドIDを設定してPostThreadMessage関数を呼び出した場合と同様に動作します。
ポストされるメッセージコードを指定します。
追加のメッセージ固有情報(ウィンドウプロシージャのwParamパラメータ)を指定します。
追加のメッセージ固有情報(ウィンドウプロシージャのlParamパラメータ)を指定します。
成功すると0以外の値が返ります。
失敗すると0が返ります。拡張エラー情報を取得するには、GetLastError関数を使います。
メッセージキューに格納されたメッセージは、そのスレッドがGetMessage関数またはPeekMessage関数を呼び出すことによってキューから取り出されます。
hWndパラメータにHWND_BROADCASTを指定して通信を行う場合は、RegisterWindowMessageを使用して、相互のアプリケーション間通信のためのユニークなメッセージを取得するべきです。
システムは、システムメッセージ(0から までの範囲)に対してマーシャリングを行います。それ以外のメッセージ( 以降)を別プロセスに送信する場合には、カスタムマーシャリングを行う必要があります。
非同期メッセージ関数(PostMessage, SendNotifyMessage, SendMessageCallback関数)で よりも下の範囲のメッセージを渡す場合には、メッセージパラメータにポインタを含めることはできません。これは、メッセージ処理が行われる前に呼び出し側に処理が戻り、メッセージ受け取り側のスレッドがメモリブロックにアクセスする前に呼び出し側スレッドがそれを解放してしまう可能性があるためです。
PostMessage関数を使用して メッセージをポストすることはできません。これにはPostQuitMessage関数を使用してください。
Windows 2000/XP: 1つのメッセージキューに対して10000メッセージまでの制限があります。この制限を超える場合には、アプリケーションを再設計して、多くのシステムリソースが消費されるのを避けるようにするべきです。この制限を調整するには、次のレジストリキーを変更します。指定可能な値の最小値は4000です。
Windows 95 以降 / Windows NT 3.1 以降