检测当前正在执行的浏览器和选项卡

时间:2014-02-27 08:55:12

标签: c# winforms

我知道如何检测已经运行的浏览器。现在,我想知道如何检测当前正在执行的浏览器,我也想知道如何检测c#winforms中某些浏览器的新标签/窗口是否打开。

E-克

如果用户点击x浏览器;我的程序应该告诉x浏览器正在运行。现在如果用户在该浏览器中打开一个新选项卡,那么我的程序应该告诉“在x浏览器中打开选项卡”。

我做了研究,但找不到确切的! 感谢

1 个答案:

答案 0 :(得分:2)

有两种方法可以做到这一点,它们都使用P/Invoke,因为没有托管代码:

  1. 投票:
    你应该定期调用GetForegroundWindow然后调用GetWindowText并测试开放的焦点窗口是否是浏览器,这也是活动标签标题(页面标题)。
  2. 事件倾听:
    您应该SetWinEventHook处理系统级事件:EVENT_SYSTEM_FOREGROUND以检测新的焦点窗口。然后,您可以在每个浏览器窗口的对象级EVENT_OBJECT_NAMECHANGE或EVENT_OBJECT_CREATE上使用SetWinEventHook来检测选项卡更改。
  3. 提示:

      
        
    • 调用SetWinEventHook的客户端线程必须具有消息循环才能接收事件。
    •   
    • 对于上下文事件,事件在调用SetWinEventHook的同一线程上传递。
    •   
    • 当您使用SetWinEventHook在托管代码中设置回调时,[您应该明确告诉]垃圾收集器不要移动回调。
    •   
    • 当钩子函数处理事件时,可能会触发其他事件,这可能导致钩子函数在原始事件的处理完成之前重新进入。钩子函数中重入的问题是事件是按顺序完成的,除非钩子函数处理这种情况。有关详细信息,请参阅Guarding Against Reentrancy
    •