如何使用事件(非轮询)检测C#中的窗口标题更改
我希望能够在窗口(不一定是我正在创建的应用程序)更改其标题时使用事件进行检测 我的想法(但没有一个使用专门的事件):如何使用事件(非轮询)检测C#中的窗口标题更改,c#,windows,winapi,C#,Windows,Winapi,我希望能够在窗口(不一定是我正在创建的应用程序)更改其标题时使用事件进行检测 我的想法(但没有一个使用专门的事件): 在鼠标点击和键盘笔划中添加一个事件,这样我可以检测到标题何时会更改,但这并不完美,因为标题可能在最后一次点击后几秒钟更改(例如加载网站) 仅对白名单上的应用程序执行一些轮询 编辑:我成功地将捕获点击的事件系统捕获开始钩子放入。它确实适用于更改选项卡,但对于加载新页面,它不会捕获更改,因为加载页面通常需要一些时间。我正在使用UIA(正如Hans所建议的那样)来完成此操作。我检测
- 在鼠标点击和键盘笔划中添加一个事件,这样我可以检测到标题何时会更改,但这并不完美,因为标题可能在最后一次点击后几秒钟更改(例如加载网站)
- 仅对白名单上的应用程序执行一些轮询
编辑:我成功地将捕获点击的
事件系统捕获开始
钩子放入。它确实适用于更改选项卡,但对于加载新页面,它不会捕获更改,因为加载页面通常需要一些时间。我正在使用UIA(正如Hans所建议的那样)来完成此操作。我检测新窗口何时打开,获取UIA元素,并为其订阅NameProperty
的属性更改事件处理程序
Automation.AddAutomationPropertyChangedEventHandler(
<your window AutomationElement>,
TreeScope.Element,
<your delegate>,
AutomationElement.NameProperty);
Automation.AddAutomationPropertyChangedEventHandler(
,
树镜元素,
,
AutomationElement.NameProperty);
@andlabs我能够检测到用户何时关注不同的窗口(检测窗口更改),但在Chrome中,有一个窗口具有多个选项卡,因此对于此类软件,我希望检测窗口标题的更改。基本上,我想检测用户使用的不同软件,以及用户何时更改窗口。与monitor.AFAIK一样,没有窗口标题更改事件。您可能需要使用SetWindowsHookEx
截取WM_SETTEXT
消息。但有些应用程序具有自定义绘制的标题,因此这不是一个通用解决方案。等等,您想检查用户在其web浏览器中打开的选项卡吗?为此,你必须直接与网络浏览器对话;Windows不提供通用浏览器通信API。(我最初的评论怎么了?)