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
此函数的行为。 此参数可以是以下一个或多个值。
[in] uTimeout
类型:UINT
超时期限的持续时间(以毫秒为单位)。 如果消息是广播消息,则每个窗口都可以使用全职超时期限。 例如,如果指定了 5 秒超时期限,并且有三个无法处理消息的顶级窗口,则最多可以延迟 15 秒。
[out, optional] lpdwResult
类型:PDWORD_PTR
消息处理的结果。 此参数的值取决于指定的消息。
返回值
类型:LRESULT
如果函数成功,则返回值为非零。 SendMessageTimeout 在使用 HWND_BROADCAST 时不会提供有关各个窗口超时的信息。
如果函数失败或超时,则返回值为 0。
请注意,函数并不总是在失败时调用 setLastError
言论
该函数调用指定窗口的窗口过程,如果指定的窗口属于其他线程,则在窗口过程处理消息或指定的超时期限已过之前不会返回。 如果接收消息的窗口与当前线程属于同一队列,则直接调用窗口过程 - 将忽略超时值。
此函数认为,如果线程在五秒内未调用 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 中引入) |
另请参阅
概念
参考