gpt4 book ai didi

c# - 窗口标题更改事件

转载 作者:太空狗 更新时间:2023-10-29 21:02:32 32 4
gpt4 key购买 nike

如果一个窗口,例如Firefox,将其标题从 Firefox 更改为 Stack Overflow - Firefox 然后我希望我的应用程序记录 Firefox 更改其标题。

如果不使用钩子(Hook)和循环 (EnumWindows) 这可能吗?如果只能用钩子(Hook)完成,哪种类型的钩子(Hook)?

最佳答案

WinEvents 是实现此目的的方法。您需要的 API 是 SetWinEventHook() - 如果您关心特定窗口,请使用 GetWindowThreadProcessId() 获取 HWND 的 threadId,然后仅监听来自该特定线程的事件。对于窗口标题更改,您需要 EVENT_OBJECT_NAMECHANGE 事件。

您可以“在上下文中”或“脱离上下文” Hook - 后者是最简单的,意味着事件会返回到您自己的进程,因此您不需要单独的 DLL - 这使得它成为可能在 C# 中完成这一切;但是调用 SetWinEventHook 的线程必须有一个消息循环 (GetMessage/TranslateMessage/DispatchMessage),因为事件是在幕后使用消息形式传递的。

在您的 WinEvent 回调中,您需要检查 HWND 是否是您关心的那个,因为您将获得该目标线程上任何 UI 的名称更改,可能包括子窗口名称更改,或您需要的其他内容不关心。

--

顺便查一下this answer对于一些使用 WinEvents 的示例 C# 代码;它使用它们来跟踪桌面上所有窗口的前景窗口变化;但只需进行上面概述的一些简单修改即可跟踪特定窗口上的名称更改。

关于c# - 窗口标题更改事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8764348/

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