SendMessageTimeoutA 関数 (winuser.h)

指定したメッセージを 1 つ以上のウィンドウに送信します。

構文

LRESULT SendMessageTimeoutA(
  [in]            HWND       hWnd,
  [in]            UINT       Msg,
  [in]            WPARAM     wParam,
  [in]            LPARAM     lParam,
  [in]            UINT       fuFlags,
  [in]            UINT       uTimeout,
  [out, optional] PDWORD_PTR lpdwResult
);

パラメーター

[in] hWnd

型: HWND

ウィンドウ プロシージャがメッセージを受信するウィンドウへのハンドル。

このパラメーターが HWND_BROADCAST ((HWND)0xffff) の場合、メッセージは、無効または非表示の未所有のウィンドウを含む、システム内のすべての最上位ウィンドウに送信されます。 この関数は、各ウィンドウがタイムアウトするまで戻りません。したがって、合計待機時間は、uTimeout 最上位のウィンドウの数を乗算した値までです。

[in] Msg

型: UINT

送信するメッセージ。

システム提供のメッセージの一覧については、「System-Defined メッセージ」を参照してください。

[in] wParam

型: WPARAM

追加のメッセージ固有の情報。

[in] lParam

型: LPARAM

追加のメッセージ固有の情報。

[in] fuFlags

型: UINT

この関数の動作。 このパラメーターには、次の値のうち 1 つ以上を指定できます。

価値 意味
SMTO_ABORTIFHUNG
0x0002
この関数は、受信スレッドが応答しない、または "ハング" しているように見える場合、タイムアウト期間が経過するのを待たずに戻ります。
SMTO_BLOCK
0x0001
関数が戻るまで、呼び出し元のスレッドが他の要求を処理できないようにします。
SMTO_NORMAL
0x0000
呼び出し元のスレッドは、関数が返されるのを待っている間に他の要求を処理することを妨げません。
SMTO_NOTIMEOUTIFNOTHUNG
0x0008
この関数は、受信スレッドがメッセージを処理している限り、タイムアウト期間を強制しません。
SMTO_ERRORONEXIT
0x0020
メッセージの処理中に受信ウィンドウが破棄された場合、またはその所有スレッドが終了した場合、関数は 0 を返す必要があります。

[in] uTimeout

型: UINT

タイムアウト期間の期間 (ミリ秒単位)。 メッセージがブロードキャスト メッセージの場合、各ウィンドウで完全なタイムアウト期間を使用できます。 たとえば、5 秒のタイムアウト期間を指定し、メッセージの処理に失敗する最上位レベルのウィンドウが 3 つある場合、最大で 15 秒の遅延が発生する可能性があります。

[out, optional] lpdwResult

型: PDWORD_PTR

メッセージ処理の結果。 このパラメーターの値は、指定されたメッセージによって異なります。

戻り値

型: LRESULT

関数が成功した場合、戻り値は 0 以外です。 SendMessageTimeout では、HWND_BROADCAST が使用されている場合、個々のウィンドウのタイムアウトに関する情報は提供されません。

関数が失敗した場合、またはタイムアウトした場合、戻り値は 0 になります。 この関数は、失敗した場合に SetLastError 常に呼び出すとは限りません。 失敗の理由が重要な場合は、SendMessageTimeout を呼び出す前に SetLastError(ERROR_SUCCESS) を呼び出します。 関数が 0 を返し、GetLastError がERROR_SUCCESSを返す場合は、汎用エラーとして扱います。

備考

この関数は、指定したウィンドウのウィンドウ プロシージャを呼び出し、指定したウィンドウが別のスレッドに属している場合、ウィンドウ プロシージャがメッセージを処理するか、指定したタイムアウト期間が経過するまで戻りません。 メッセージを受信するウィンドウが現在のスレッドと同じキューに属している場合、ウィンドウ プロシージャが直接呼び出されます。タイムアウト値は無視されます。

この関数は、スレッドが 5 秒以内に GetMessage または同様の関数 呼び出していない場合、応答していないと見なします。

システムは、システム メッセージ (0 ~ (WM_USER-1) の範囲のメッセージ) に対してのみマーシャリングを実行します。 他のメッセージ (>= WM_USER) を別のプロセスに送信するには、カスタム マーシャリングを実行する必要があります。

手記

winuser.h ヘッダーは、SendMessageTimeout をエイリアスとして定義し、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルまたは実行時エラーが発生する不一致につながる可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。

必要条件

要件 価値
サポートされる最小クライアント 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 で導入)

関連項目

概念

GetMessage の

InSendMessage を する

メッセージとメッセージ キューの

PostMessage を する

リファレンス

SendDlgItemMessage の

SendMessage を する

SendMessageCallback の

SendNotifyMessage を する