SendMessageTimeout(A)

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

LRESULT SendMessageTimeoutA(
    HWND   hWnd,         // window handle
    UINT   Msg,          // message code
    WPARAM wParam,       // wParam parameter
    LPARAM lParam,       // lParam parameter
    UINT   fuFlags,      // message code
    UINT   uTimeout,     // wParam parameter
    PDWORD_PTR pdwResult // lParam parameter
);

USER32.DLL

引数

hWnd

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

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

Msg

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

wParam

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

Windows 95/98/Me: この値は16ビット値に制限されます。

lParam

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

fuFlags

どのようにメッセージを送信するかを指定します。以下の値の組み合わせを指定することができます。

0x0000 (SMTO_NORMAL)

関数が制御を返すのを待機している間、呼び出しスレッドが他の要求に対する処理を行うことができるようにします。

0x0001 (SMTO_BLOCK)

関数が制御を返すのを待機している間、他の要求に対する処理が行われないようにします。

0x0002 (SMTO_ABORTIFHUNG)

受け取り側スレッドが応答しない状態である(ハングアップしている)と思われる場合には、タイムアウト時間が経過するのを待つことなく制御を返します。

0x0008 (SMTO_NOTIMEOUTIFNOTHUNG)

Windows 2000/XP: 受け取り側スレッドが応答を中断した場合に、タイムアウト時間が経過しても制御を返しません。

uTimeout

処理の継続時間をミリ秒単位で指定します。メッセージがブロードキャストメッセージである場合には、それぞれのウィンドウに対してタイムアウト時間が適用されます。例えば、メッセージ処理を行うことのできない3つのトップレベルウィンドウが存在している状態で5秒のタイムアウト時間を指定した場合、15秒の遅延が生じる可能性があります。

pdwResult

メッセージ処理の結果を受け取る変数のアドレスを指定します。受け取る値は送信されたメッセージに依存します。

戻り値

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

解説

この関数は、指定されたウィンドウのウィンドウプロシージャを呼び出します。指定されたウィンドウが異なるスレッドに属する場合には、ウィンドウプロシージャがメッセージ処理を終了するか、指定されたタイムアウト時間が経過するまで制御を返しません。指定されたウィンドウが呼び出しスレッドと同じスレッドキューに属する場合には、直接ウィンドウプロシージャが呼び出されます。この場合にはタイムアウト時間は無視されます。

この関数は、対象ウィンドウが属するスレッドがGetMessage関数またはそれに類する関数を5秒間呼び出していない場合に、そのスレッドが応答しない状態であると判断します。

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

対応情報

Windows 95 以降 / Windows NT 3.1 以降