窗口标题更改事件

Elm*_*lmo 6 .net c# vb.net hook winapi

如果一个窗口中,如火狐,改变它的标题,从FirefoxStack Overflow - Firefox那时我想我的应用程序来记录火狐改变其标题.

这可能不使用钩子和循环(EnumWindows)?如果只能用钩子做什么钩子?

Bre*_*McK 10

WinEvents是去这里的方式.您需要的API是SetWinEventHook() - 如果您关心特定窗口,请使用GetWindowThreadProcessId()获取HWND的threadId,然后仅侦听来自该特定线程的事件.对于窗口标题更改,您将需要EVENT_OBJECT_NAMECHANGE事件.

您可以挂钩"在上下文中"或"在上下文中" - 后者是最简单的,并且意味着事件被传递回您自己的进程,因此您不需要单独的DLL - 这使得它可以执行它全部用C#; 但是调用SetWinEventHook的线程必须有一个消息循环(GetMessage/TranslateMessage/DispatchMessage),因为事件是在幕后使用一种消息形式传递的.

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

-

顺便说一下,您可以查看一些使用WinEvents的示例C#代码的答案 ; 它正在使用它们来跟踪桌面上所有窗口的前景窗口变化; 但是,我们应该采取上面列出的一些简单修改来跟踪特定窗口上的名称更改.