PostMessageA 関数 (winuser.h)
指定したウィンドウを作成し、スレッドがメッセージを処理するのを待たずにを返すスレッドに関連付けられたメッセージ キューにメッセージをPlaces (投稿) します。
スレッドに関連付けられているメッセージ キューにメッセージを投稿するには、 PostThreadMessage 関数を使用します。
構文
BOOL PostMessageA(
[in, optional] HWND hWnd,
[in] UINT Msg,
[in] WPARAM wParam,
[in] LPARAM lParam
);
パラメーター
[in, optional] hWnd
型: HWND
ウィンドウ プロシージャがメッセージを受信するウィンドウへのハンドル。 次の値は特別な意味を持ちます。
値 | 意味 |
---|---|
|
メッセージは、無効または非表示の未所有のウィンドウ、重複するウィンドウ、ポップアップ ウィンドウなど、システム内のすべての最上位ウィンドウに投稿されます。 メッセージは子ウィンドウに投稿されません。 |
|
関数は PostThreadMessage の呼び出しと同様に動作し、 dwThreadId パラメーターは現在のスレッドの識別子に設定されます。 |
Windows Vista 以降では、メッセージの投稿は UIPI の対象となります。 プロセスのスレッドは、整合性レベルが低いか等しいプロセス内のスレッドのメッセージ キューにのみメッセージを投稿できます。
[in] Msg
型: UINT
投稿するメッセージ。
システム提供のメッセージの一覧については、「 システム定義メッセージ」を参照してください。
[in] wParam
型: WPARAM
追加のメッセージ固有情報。
[in] lParam
型: LPARAM
追加のメッセージ固有情報。
戻り値
種類: BOOL
関数が成功すると、戻り値は 0 以外になります。
関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。
解説
メッセージが UIPI によってブロックされると、 GetLastError で取得された最後のエラーは 5 (アクセス拒否) に設定されます。
メッセージ キュー内のメッセージは、 GetMessage または PeekMessage 関数の呼び出しによって取得されます。
HWND_BROADCASTを使用して通信する必要があるアプリケーションでは、RegisterWindowMessage 関数を使用して、アプリケーション間通信用の一意のメッセージを取得する必要があります。
システムは、システム メッセージ (0 ~ (WM_USER-1) の範囲) に対してのみマーシャリングを実行します。 他のメッセージ (これらの >= WM_USER) を別のプロセスに送信するには、カスタム マーシャリングを実行する必要があります。
WM_USER以下の範囲内のメッセージを非同期メッセージ関数 (PostMessage、SendNotifyMessage、SendMessageCallback) に送信する場合、そのメッセージ パラメーターにポインターを含めることはできません。 そうでない場合、操作は失敗します。 関数は、受信スレッドがメッセージを処理する機会を得る前に を返し、送信側は使用される前にメモリを解放します。
PostMessage を使用してWM_QUIT メッセージを投稿しないでください。PostQuitMessage 関数を使用します。
アクセシビリティ アプリケーションでは 、PostMessage を使用して 、WM_APPCOMMAND メッセージをシェルに投稿してアプリケーションを起動できます。 この機能は、他の種類のアプリケーションで動作することは保証されていません。
メッセージ キューには、最大 10,000 個のメッセージを含めることができます。 この制限は十分に大きくする必要があります。 アプリケーションが制限を超えた場合は、大量のシステム リソースを消費しないように再設計する必要があります。 この制限を調整するには、次のレジストリ キーを変更します。
HKEY_LOCAL_MACHINE SOFTWARE Microsoft Windows NT CurrentVersion Windows USERPostMessageLimit
関数が失敗した場合は、 GetLastError を 呼び出して拡張エラー情報を取得します。 GetLastError は 、制限に達したときに ERROR_NOT_ENOUGH_QUOTA を返します。
許容される最小値は 4000 です。
例
次の例は、 PostMessage 関数を使用してプライベート ウィンドウ メッセージを投稿する方法を示しています。 WM_COMPLETE というプライベート ウィンドウ メッセージを定義したとします。
#define WM_COMPLETE (WM_USER + 0)
次に示すように、指定したウィンドウを作成したスレッドに関連付けられているメッセージ キューにメッセージを投稿できます。
WaitForSingleObject (pparams->hEvent, INFINITE) ;
lTime = GetCurrentTime () ;
PostMessage (pparams->hwnd, WM_COMPLETE, 0, lTime);
その他の例については、「 データ リンクの開始」を参照してください。
注意
winuser.h ヘッダーは PostMessage をエイリアスとして定義し、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択します。 encoding-neutral エイリアスの使用を encoding-neutral ではないコードと混在すると、コンパイル エラーまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows 2000 Server [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | winuser.h (Windows.h を含む) |
Library | User32.lib |
[DLL] | User32.dll |
API セット | ext-ms-win-ntuser-message-l1-1-0 (Windows 8で導入) |
関連項目
概念
リファレンス