SendMessage(A)

指定されたメッセージをウィンドウに送信します。この関数は、指定したウィンドウのウィンドウプロシージャが処理を完了するまで制御を返しません。

メッセージを送信して直ちに制御を返すようにするには、SendMessageCallback関数またはSendNotifyMessage関数を使います。メッセージをスレッドのメッセージキューにポストして直ちに制御を返すには、PostMessage関数またはPostThreadMessage関数を使います。

LRESULT SendMessageA(
    HWND   hWnd,    // window handle
    UINT   Msg,     // message code
    WPARAM wParam,  // wParam parameter
    LPARAM lParam   // lParam parameter
);

USER32.DLL

引数

hWnd

メッセージを受け取るウィンドウのハンドルを指定します。

0xFFFF (HWND_BROADCAST) を指定すると、システム上のすべてのトップレベルウィンドウに送信されます。これには、無効あるいは不可視の非所有ウィンドウ、オーバーラップウィンドウ、ポップアップウィンドウも含まれます。子ウィンドウにはメッセージは送信されません。

Msg

送信されるメッセージコードを指定します。

wParam

追加のメッセージ固有情報(ウィンドウプロシージャのwParamパラメータ)を指定します。

lParam

追加のメッセージ固有情報(ウィンドウプロシージャのlParamパラメータ)を指定します。

戻り値

メッセージ処理の結果(ウィンドウプロシージャの戻り値)が返ります。戻り値は送られたメッセージによって異なります。

解説

hWndパラメータにHWND_BROADCASTを指定して通信を行う場合は、RegisterWindowMessageを使用して、相互のアプリケーション間通信のためのユニークなメッセージを取得するべきです。

システムは、システムメッセージ(0からWM_USERまでの範囲)に対してマーシャリングを行います。それ以外のメッセージ(WM_USER以降)を別プロセスに送信する場合には、カスタムマーシャリングを行う必要があります。

指定されたウィンドウが呼び出しスレッドによって作成されている場合、ウィンドウプロシージャが直接呼び出されます。呼び出しスレッドと異なるスレッドによって作成されたウィンドウが指定された場合、システムはそのスレッドに切り替えて適切なウィンドウプロシージャを呼び出します。このとき、受信側スレッドがメッセージを処理するまで送信側スレッドの実行は停止されます。ただし、メッセージ処理を待つ間でも、送信側スレッドは自身に送られてきたキューイングされないメッセージは処理されます。これを防ぐにはSendMessageTimeout関数呼び出しでSMTO_BLOCKフラグを指定する必要があります。

対応情報

Windows 95 以降 / Windows NT 3.1 以降