Bre*_*McK 10
WinEvents是去这里的方式.您需要的API是SetWinEventHook() - 如果您关心特定窗口,请使用GetWindowThreadProcessId()获取HWND的threadId,然后仅侦听来自该特定线程的事件.对于窗口标题更改,您将需要EVENT_OBJECT_NAMECHANGE事件.
您可以挂钩"在上下文中"或"在上下文中" - 后者是最简单的,并且意味着事件被传递回您自己的进程,因此您不需要单独的DLL - 这使得它可以执行它全部用C#; 但是调用SetWinEventHook的线程必须有一个消息循环(GetMessage/TranslateMessage/DispatchMessage),因为事件是在幕后使用一种消息形式传递的.
在WinEvent回调中,您需要检查HWND是否是您关心的那个,因为您将获得该目标线程上任何UI的名称更改,可能包括子窗口名称更改或其他您不关心的内容关心.
-
顺便说一下,您可以查看一些使用WinEvents的示例C#代码的答案 ; 它正在使用它们来跟踪桌面上所有窗口的前景窗口变化; 但是,我们应该采取上面列出的一些简单修改来跟踪特定窗口上的名称更改.