gpt4 book ai didi

c - 如何等待窗口标题更新?

转载 作者:行者123 更新时间:2023-11-30 14:29:05 24 4
gpt4 key购买 nike

当我打开一个窗口时,在几秒钟的标题更新后,它首先出现错误的标题(仍未更新),是否有任何功能或实用的解决方案可以等待这种情况,以便在发生这种情况时我可以在某处发送消息...

我有一个 cbt 钩子(Hook),当窗口激活时它会获取 wparam,我需要等待这个 wparam 成为真正的标题(而不是假标题)

我可以为每次激活设置一个 sleep ,但这会减慢一切。

最佳答案

如果您的目标窗口遵循标准方法来更新其标题,您可以添加一个钩子(Hook)来捕获标题更改的精确时刻。

为此,您需要使用 SetWindowsHookEx 添加一个 Windows 消息返回 Hook ,并从代码中向其传递一个 CallWndRetProc 处理程序,以在 Windows 消息完成时接收通知通过目标窗口的消息处理程序。

SetWindowsHookEx() @ MSDN
CallWndRetProc @ MSDN

您需要捕获的 Windows 消息是 WM_SETTEXT,发送该消息是为了触发窗口默认文本/标题的更改。

WM_SETTEXT @ MSDN

如果您想单独测试这一点,WM_SETTEXT 是在调用 SetWindowText 更改窗口文本/标题时发送的隐式消息。

SetWindowText() @ MSDN

此外,您还可以摆脱 cbt Hook ,因为 WM_ACTIVATEWM_MOUSEACTIVATEWM_SETFOCUS 可以通过以下方式捕获:用于捕获 WM_SETTEXT 的同一个钩子(Hook)。这些消息涵盖了 Windows 的各种级别的激活事件和类型。

WM_ACTIVATE @ MSDN
WM_MOUSEACTIVATE @ MSDN
WM_SETFOCUS @ MSDN

最后,如果目标窗口是您在自己的进程中创建和控制的窗口,您可以简单地拦截这些窗口消息,而不是使用 Hook 。如果无法使用可用的框架来拦截这些消息,SetClassLongPtr 也是另一种选择,它可用于实现该类型窗口的子类,以允许您拦截窗口消息。如果您使用此方法,您将把所有调用委托(delegate)给原始 Windows 消息处理程序,并且仅在收到感兴趣的消息后从原始过程返回期间执行操作。

SetClassLongPtr() @ MSDN
WindowProc @ MSDN

关于c - 如何等待窗口标题更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5254863/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com