Browser 从外部应用程序枚举浏览器选项卡

Browser 从外部应用程序枚举浏览器选项卡,browser,tabs,window,external,Browser,Tabs,Window,External,有点奇怪(有挑战性?)的问题。是否可以从外部应用程序以编程方式访问打开浏览器的选项卡?我知道这是个模糊的问题,但请听我说: 我正在尝试创建一个“Gmail聊天通知”应用程序,当存在未应答的聊天信息时,它会在Windows系统托盘中闪烁通知图标。目前,据我所知,Gmail聊天中唯一内置的通知是: 启用声音(我不喜欢) 观察窗口/选项卡/页面标题,查看交替闪烁的“Gmail”/“Blah says…”消息 #2的问题是:当浏览器窗口最小化时,当Gmail选项卡不是浏览器中的活动选项卡时,窗口标题不会

有点奇怪(有挑战性?)的问题。是否可以从外部应用程序以编程方式访问打开浏览器的选项卡?我知道这是个模糊的问题,但请听我说:

我正在尝试创建一个“Gmail聊天通知”应用程序,当存在未应答的聊天信息时,它会在Windows系统托盘中闪烁通知图标。目前,据我所知,Gmail聊天中唯一内置的通知是:

  • 启用声音(我不喜欢)
  • 观察窗口/选项卡/页面标题,查看交替闪烁的“Gmail”/“Blah says…”消息
  • #2的问题是:当浏览器窗口最小化时,当Gmail选项卡不是浏览器中的活动选项卡时,窗口标题不会改变,我也不会注意到新的聊天信息

    因此,我想创建一个应用程序,为我查看选项卡标题。(所有选项卡标题,而不仅仅是窗口标题,它只是活动选项卡标题。)我创建了一个概念验证C#应用程序,通过枚举活动窗口进程并观察窗口标题中闪烁的“Blah says…”来检测未应答的聊天消息:

    Process[] procs = Process.GetProcesses();
    IntPtr hWnd;
    foreach (Process proc in procs)
        if ((hWnd = proc.MainWindowHandle) != IntPtr.Zero)
            if (proc.MainWindowTitle.IndexOf(" says… ") >= 0)
            ...
    
    但明显的问题是,当Gmail标签不是活动/聚焦标签时,它就不起作用了(因为它只查看窗口标题)。因此,我需要一些可以深入挖掘并查看选项卡标题的内容

    我什么都愿意。我一直在想的可能是找到一种方法来枚举浏览器的标签(MDI子窗口?*祈祷*),但这可能还不太可能:)如果有其他方法可以做到这一点,比如说Firefox插件或其他什么的话,我也愿意接受其他解决方案(但最好与Windows系统托盘集成,而不仅仅存在于浏览器沙盒中)


    有人能帮我入门吗?非常感谢。

    通常不可能。浏览器选项卡不必是MDI子窗口(事实上,它们几乎肯定不是)。您不知道任意浏览器的窗口树,因此无法解析它并找出选项卡(即使您知道它适用于特定的浏览器,但它肯定是一个实现细节,即使在小版本之间也可能会发生变化)。事实上,您不知道浏览器是否对选项卡使用单独的Win32窗口句柄,因为它可能只对主窗口使用一个句柄,并自行绘制所有内容(例如,Qt和WPF应用程序可以做到这一点,我认为Opera尤其可以做到这一点,Safari也可能做到这一点)

    这方面的任何解决方案都必须是特定于浏览器的。你可能可以为IE和Firefox编写相应的插件,以便将这些信息传达给你的应用程序(虽然Firefox插件是沙盒的,所以我不确定它们是否能够进行IPC)。我看不到Opera、Safari或Chrome的任何选项