SendMessageTimeoutA 函数 (winuser.h)

将指定的消息发送到一个或多个窗口。

语法

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

此函数的行为。 此参数可以是以下一个或多个值。

价值 意义
SMTO_ABORTIFHUNG
0x0002
如果接收线程似乎未响应或“挂起”,则函数返回时不等待超时时间过。
SMTO_BLOCK
0x0001
在函数返回之前,阻止调用线程处理任何其他请求。
SMTO_NORMAL
0x0000
在等待函数返回时,不会阻止调用线程处理其他请求。
SMTO_NOTIMEOUTIFNOTHUNG
0x0008
只要接收线程正在处理消息,该函数就不会强制实施超时期限。
SMTO_ERRORONEXIT
0x0020
如果正在处理消息时,接收窗口被销毁或自己的线程死亡,则函数应返回 0。

[in] uTimeout

类型:UINT

超时期限的持续时间(以毫秒为单位)。 如果消息是广播消息,则每个窗口都可以使用全职超时期限。 例如,如果指定了 5 秒超时期限,并且有三个无法处理消息的顶级窗口,则最多可以延迟 15 秒。

[out, optional] lpdwResult

类型:PDWORD_PTR

消息处理的结果。 此参数的值取决于指定的消息。

返回值

类型:LRESULT

如果函数成功,则返回值为非零。 SendMessageTimeout 在使用 HWND_BROADCAST 时不会提供有关各个窗口超时的信息。

如果函数失败或超时,则返回值为 0。 请注意,函数并不总是在失败时调用 setLastError 。 如果失败的原因对你很重要,请先调用 SetLastError(ERROR_SUCCESS),然后再调用 SendMessageTimeout。 如果函数返回 0,GetLastError 返回ERROR_SUCCESS,则将其视为泛型故障。

言论

该函数调用指定窗口的窗口过程,如果指定的窗口属于其他线程,则在窗口过程处理消息或指定的超时期限已过之前不会返回。 如果接收消息的窗口与当前线程属于同一队列,则直接调用窗口过程 - 将忽略超时值。

此函数认为,如果线程在五秒内未调用 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