SendMessage 関数 (winuser.h)
指定したメッセージをウィンドウまたはウィンドウに送信します。 SendMessage 関数は、指定されたウィンドウのウィンドウ プロシージャを呼び出し、ウィンドウ プロシージャがメッセージを処理するまで戻りません。
メッセージを送信してすぐに返すには、 SendMessageCallback または SendNotifyMessage 関数を使用します。 スレッドのメッセージ キューにメッセージを投稿し、すぐに返すには、 PostMessage または PostThreadMessage 関数を使用します。
構文
LRESULT SendMessage(
[in] HWND hWnd,
[in] UINT Msg,
[in] WPARAM wParam,
[in] LPARAM lParam
);
パラメーター
[in] hWnd
型: HWND
ウィンドウ プロシージャがメッセージを受信するウィンドウのハンドル。 このパラメーターが ((HWND)0xffff ) HWND_BROADCAST の場合、メッセージは、無効または非表示の未所有ウィンドウ、重複したウィンドウ、ポップアップ ウィンドウなど、システム内のすべての最上位ウィンドウに送信されます。ただし、メッセージは子ウィンドウに送信されません。
メッセージ送信は UIPI の対象となります。 プロセスのスレッドは、整合性レベルが低いか等しいプロセス内のスレッドのメッセージ キューにのみメッセージを送信できます。
[in] Msg
型: UINT
送信されるメッセージ。
システム提供のメッセージの一覧については、「 システム定義メッセージ」を参照してください。
[in] wParam
型: WPARAM
追加のメッセージ固有情報。
[in] lParam
型: LPARAM
追加のメッセージ固有情報。
戻り値
型: LRESULT
戻り値は、メッセージ処理の結果を指定します。送信されたメッセージによって異なります。
注釈
メッセージが UIPI によってブロックされると、 GetLastError で取得された最後のエラーは 5 (アクセス拒否) に設定されます。
HWND_BROADCASTを使用して通信する必要があるアプリケーションでは、RegisterWindowMessage 関数を使用して、アプリケーション間通信用の一意のメッセージを取得する必要があります。
システムは、システム メッセージ (0 ~ (WM_USER-1) の範囲) に対してのみマーシャリングを実行します。 他のメッセージ (これらの >= WM_USER) を別のプロセスに送信するには、カスタム マーシャリングを実行する必要があります。
指定したウィンドウが呼び出し元のスレッドによって作成された場合、ウィンドウ プロシージャはサブルーチンとしてすぐに呼び出されます。 指定したウィンドウが別のスレッドによって作成された場合、システムはそのスレッドに切り替えて、適切なウィンドウ プロシージャを呼び出します。 スレッド間で送信されたメッセージは、受信スレッドがメッセージ取得コードを実行する場合にのみ処理されます。 送信側スレッドは、受信側のスレッドがメッセージを処理するまでブロックされます。 ただし、送信スレッドは、メッセージが処理されるのを待っている間に、キューに登録されていない受信メッセージを処理します。 これを防ぐには、 SendMessageTimeout を設定SMTO_BLOCK使用します。 キューに入れされていないメッセージの詳細については、「 非キュー メッセージ」を参照してください。
アクセシビリティ アプリケーションでは、 SendMessage を 使用して WM_APPCOMMAND メッセージをシェルに送信し、アプリケーションを起動できます。 この機能は、他の種類のアプリケーションで動作することは保証されていません。
例
例については、「 キーボード入力の表示」を参照してください。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント | 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 で導入) |
関連項目
概念
リファレンス