c# – 窗口标题已更改事件

如果是窗口,例如Firefox,改变它的标题,从Firefox到Stack Overflow – Firefox然后我希望我的应用程序记录Firefox改变了它的标题.

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

解决方法

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

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

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

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

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...