SendMessage

1 つまたは複数のウィンドウへ、指定されたメッセージを送信します。この関数は、指定されたウィンドウのウィンドウプロシージャを呼び出し、そのウィンドウプロシージャがメッセージを処理し終わった後で、制御を返します。

メッセージを送信して即座に制御を返すには、SendMessageCallback または SendNotifyMessage 関数を使ってください。メッセージを 1 つのスレッドのメッセージキューにポストして即座に制御を返すには、PostMessage または PostThreadMessage 関数を使ってください。

LRESULT SendMessage(
  HWND hWnd,      // 送信先ウィンドウのハンドル
  UINT Msg,       // メッセージ
  WPARAM wParam,  // メッセージの最初のパラメータ
  LPARAM lParam   // メッセージの 2 番目のパラメータ
);

パラメータ

hWnd
1 つのウィンドウのハンドルを指定します。このウィンドウのウィンドウプロシージャがメッセージを受信します。HWND_BROADCAST を指定すると、この関数は、システム内のすべてのトップレベルウィンドウ(親を持たないウィンドウ)へメッセージを送信します。無効になっている所有されていないウィンドウ、不可視の所有されていないウィンドウ、オーバーラップされた(手前にほかのウィンドウがあって覆い隠されている)ウィンドウ、ポップアップウィンドウも送信先になります。子ウィンドウへはメッセージを送信しません。
Msg
送信するべきメッセージを指定します。
wParam
メッセージ特有の追加情報を指定します。
lParam
メッセージ特有の追加情報を指定します。

戻り値

メッセージ処理の結果が返ります。この戻り値の意味は、送信されたメッセージにより異なります。

解説

HWND_BROADCAST フラグを使って通信を行う必要がある複数のアプリケーションは、アプリケーション間通信の専用メッセージを取得する目的では、RegisterWindowMessage 関数を呼び出すべきです。

指定されたウィンドウが、呼び出し側スレッドが作成したものであった場合、そのウィンドウのウィンドウプロシージャがサブルーチンとして即座に呼び出されます。指定されたウィンドウが、他のスレッドが作成したものであった場合、システムはそのスレッドへの切り替えを行い、次に適切なウィンドウプロシージャを呼び出します。複数のスレッド間で送信されたメッセージが処理されるのは、受信側スレッドがメッセージ取得コードを実行したときだけです。送信側スレッドは、受信側スレッドがメッセージの処理を終えるまで、ブロックされます(待機状態になります)。

対応情報

Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダー:Winuser.h 内で宣言、Windows.h をインクルード
インポートライブラリ:User32.lib を使用
Unicode:Windows NT/2000 は Unicode 版と ANSI 版を実装

参照

InSendMessage, PostMessage, PostThreadMessage, RegisterWindowMessage SendDlgItemMessage, SendMessageCallback, SendNotifyMessage

表示: