Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用事件(非轮询)检测C#中的窗口标题更改_C#_Windows_Winapi - Fatal编程技术网

如何使用事件(非轮询)检测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。(我最初的评论怎么了?)