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
要发送的消息。
有关系统提供的消息的列表,请参阅 系统定义的消息。
[in] wParam
类型:WPARAM
任何其他特定于消息的信息。
[in] lParam
类型:LPARAM
任何其他特定于消息的信息。
[in] fuFlags
类型: UINT
此函数的行为。 此参数可使用以下一个或多个值。
[in] uTimeout
类型: UINT
超时期限的持续时间(以毫秒为单位)。 如果消息是广播消息,则每个窗口都可以使用完整的超时期限。 例如,如果指定 5 秒超时期限,并且有 3 个顶级窗口无法处理消息,则最多可能会有 15 秒的延迟。
[out, optional] lpdwResult
类型: PDWORD_PTR
消息处理的结果。 此参数的值取决于指定的消息。
返回值
类型: LRESULT
如果该函数成功,则返回值为非零值。 如果使用HWND_BROADCAST,SendMessageTimeout 不会提供有关单个窗口超时的信息。
如果函数失败或超时,则返回值为 0。 要获得更多的错误信息,请调用 GetLastError。 如果 GetLastError 返回 ERROR_TIMEOUT,则函数超时。
Windows 2000: 如果 GetLastError 返回 0,则函数超时。
注解
函数为指定窗口调用窗口过程,如果指定的窗口属于其他线程,则在窗口过程处理消息或指定的超时期限已过之前不会返回 。 如果接收消息的窗口与当前线程属于同一队列,则直接调用窗口过程 - 超时值将被忽略。
此函数认为线程在五秒内未调用 GetMessage 或类似函数时没有响应。
系统仅对系统消息执行封送处理, (范围为 0 到 (WM_USER-1) ) 。 若要将其他消息 (那些 >= WM_USER) 发送到另一个进程,必须执行自定义封送处理。
注意
winuser.h 标头将 SendMessageTimeout 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非特定编码别名的使用与非非特定编码的代码混合使用可能会导致不匹配,从而导致编译或运行时错误。 有关详细信息,请参阅 函数原型的约定。
要求
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | Windows |
标头 | winuser.h (包括 Windows.h) |
Library | User32.lib |
DLL | User32.dll |
API 集 | 在 Windows 8) 中引入的 ext-ms-win-ntuser-message-l1-1-0 ( |
请参阅
概念性
引用
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈