PostThreadMessageA 関数 (winuser.h)
指定したスレッドのメッセージ キューにメッセージを投稿します。 スレッドがメッセージを処理するのを待たずに返されます。
構文
BOOL PostThreadMessageA(
[in] DWORD idThread,
[in] UINT Msg,
[in] WPARAM wParam,
[in] LPARAM lParam
);
パラメーター
[in] idThread
型: DWORD
メッセージが投稿されるスレッドの識別子。
指定したスレッドにメッセージ キューがない場合、関数は失敗します。 システムは、スレッドがユーザー関数または GDI 関数のいずれかを最初に呼び出すときに、スレッドのメッセージ キューを作成します。 詳細については、「解説」セクションを参照してください。
メッセージの投稿は UIPI の対象となります。 プロセスのスレッドは、整合性レベルが低いか等しいプロセス内のスレッドのポストされたメッセージ キューにのみメッセージを投稿できます。
このスレッドには、同じローカル一意識別子 (LUID) を持つプロセスに属しているが、別のデスクトップにあるスレッドにメッセージを投稿するための SE_TCB_NAME 特権が必要です。 それ以外の場合、関数は失敗し、ERROR_INVALID_THREAD_IDを返します。
このスレッドは、呼び出し元スレッドと同じデスクトップに属しているか、同じ LUID を持つプロセスに属している必要があります。 それ以外の場合、関数は失敗し、ERROR_INVALID_THREAD_IDを返します。
[in] Msg
型: UINT
投稿するメッセージの種類。
[in] wParam
型: WPARAM
追加のメッセージ固有の情報。
[in] lParam
型: LPARAM
追加のメッセージ固有の情報。
戻り値
型: BOOL
関数が成功した場合、戻り値は 0 以外です。
関数が失敗した場合、戻り値は 0 です。 拡張エラー情報を取得するには、GetLastError
備考
メッセージが UIPI によってブロックされると、GetLastErrorで取得された最後のエラー
メッセージの送信先のスレッドがメッセージ キューを作成している必要があります。そうしないと、PostThreadMessage
- イベント オブジェクトを作成し、スレッドを作成します。
-
WaitForSingleObject 関数を使用して、PostThreadMessageを呼び出す前イベントがシグナル状態に設定されるのを待機します。 -
メッセージが投稿されるスレッドで、ここに示すように PeekMessage
呼び出して、システムにメッセージ キューの作成を強制します。 PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE)
- イベントを設定して、スレッドが投稿されたメッセージを受信する準備ができていることを示します。
PostThreadMessage
システムは、システム メッセージ (0 ~ (WM_USER-1) の範囲のメッセージ) に対してのみマーシャリングを実行します。 他のメッセージ (>= WM_USER) を別のプロセスに送信するには、カスタム マーシャリングを実行する必要があります。
メッセージ キューあたり 10,000 件の投稿メッセージに制限があります。 この制限は十分に大きくする必要があります。 アプリケーションが制限を超えた場合は、大量のシステム リソースを消費しないように再設計する必要があります。 この制限を調整するには、次のレジストリ キーを変更します。
HKEY_LOCAL_MACHINE SOFTWARE Microsoft Windows NT CurrentVersion Windows USERPostMessageLimit
許容される最小値は 4000 です。
手記
winuser.h ヘッダーは、Unicode プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして PostThreadMessage を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | 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 で導入) |
関連項目
概念
GetCurrentThreadId の
GetMessage の
GetWindowThreadProcessId の
その他のリソース を
PeekMessage の
PostMessage を
リファレンス
WaitForSingleObject の