次の方法で共有


PostMessageA 関数 (winuser.h)

指定したウィンドウを作成したスレッドに関連付けられたメッセージ キューにメッセージを配置 (投稿) し、スレッドがメッセージを処理するのを待たずに返します。

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

構文

BOOL PostMessageA(
  [in, optional] HWND   hWnd,
  [in]           UINT   Msg,
  [in]           WPARAM wParam,
  [in]           LPARAM lParam
);

パラメーター

[in, optional] hWnd

型: HWND

ウィンドウ プロシージャがメッセージを受信するウィンドウへのハンドル。 次の値は特別な意味を持ちます。

価値 意味
HWND_BROADCAST
((HWND)0xffff)
メッセージは、無効または非表示の未所有のウィンドウ、重複するウィンドウ、ポップアップ ウィンドウなど、システム内のすべての最上位ウィンドウに投稿されます。 メッセージは子ウィンドウに投稿されません。
ヌル
この関数は、dwThreadId パラメーターを現在のスレッドの識別子に設定して、postThreadMessage を する呼び出しと同様に動作します。
 

Windows Vista 以降では、メッセージの投稿は UIPI の対象となります。 プロセスのスレッドは、整合性レベルが低いか等しいプロセス内のスレッドのメッセージ キューにのみメッセージを投稿できます。

[in] Msg

型: UINT

投稿するメッセージ。

システム提供のメッセージの一覧については、「System-Defined メッセージ」を参照してください。

[in] wParam

型: WPARAM

追加のメッセージ固有の情報。

[in] lParam

型: LPARAM

追加のメッセージ固有の情報。

戻り値

型: BOOL

関数が成功した場合、戻り値は 0 以外です。

関数が失敗した場合、戻り値は 0 です。 拡張エラー情報を取得するには、GetLastError呼び出します。

備考

メッセージが UIPI によってブロックされると、GetLastErrorで取得された最後のエラー 5 (アクセス拒否) に設定されます。

メッセージ キュー内のメッセージは、GetMessage または PeekMessage 関数 呼び出しによって取得されます。

HWND_BROADCAST を使用して通信する必要があるアプリケーションでは、RegisterWindowMessage 関数を使用して、アプリケーション間通信用の一意のメッセージを取得する必要があります。

システムは、システム メッセージ (0 ~ (WM_USER-1) の範囲のメッセージ) に対してのみマーシャリングを実行します。 他のメッセージ (>= WM_USER) を別のプロセスに送信するには、カスタム マーシャリングを実行する必要があります。

以下の範囲のメッセージを非同期メッセージ関数 (PostMessage WM_USERSendNotifyMessage、および 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 ヘッダーは、Unicode プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして PostMessage を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。

必要条件

要件 価値
サポートされる最小クライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされる最小サーバー Windows 2000 Server [デスクトップ アプリのみ]
ターゲット プラットフォーム の ウィンドウズ
ヘッダー winuser.h (Windows.h を含む)
ライブラリ User32.lib
DLL User32.dll
API セットの ext-ms-win-ntuser-message-l1-1-0 (Windows 8 で導入)

関連項目

概念

GetMessage の

メッセージとメッセージ キューの

PeekMessage の

PostQuitMessage

PostThreadMessage を する

リファレンス

RegisterWindowMessage の

SendMessageCallback の

SendNotifyMessage を する