枚举从外部应用程序的浏览器标签(Enumerate browser tabs from extern

2019-06-25 15:39发布

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

我想创建一个“Gmail聊天通知”应用程序时,存在一个悬而未决的聊天消息在闪烁Windows系统托盘中的通知图标。 现在,据我所知道的,唯一内置Gmail聊天通知如下:

  1. 启用声音(我不喜欢)
  2. 留意交替闪烁的“Gmail的” /“嗒嗒说...”消息的窗口/标签/页面标题。

以#2的问题是:当最小化浏览器窗口,并在Gmail的标签是不是在浏览器中的活动标签,窗口标题不会改变,我没有注意到新的聊天消息。

所以我想创建一个手表标签的标题为我的应用程序。 (所有标签的标题,而不仅仅是窗口标题,这是唯一的活动标签称号。)的我创建了一个验证的概念C#应用程序通过枚举活动Windows进程和留意闪烁的“嗒嗒检测未回答的聊天消息在窗口的标题说...”:

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子窗口?*手指交叉*),但也许这不是甚至接近可能的:)我也开放给其他的解决方案太多,如果有一个与方式,要做到这一点说,火狐插件或东西(但它会是不错的与Windows系统托盘整合,而不是仅仅在浏览器沙盒存在)。

任何人都可以帮助让我开始? 感谢很多提前。

Answer 1:

这是不可能的总称。 浏览器标签不需要是MDI子窗口(事实上,他们几乎都不是)。 你不知道一个任意浏览器窗口的树,所以你无法分析,并找出选项卡(即使你知道这对一个特定的浏览器,它肯定是一个实现细节很可能小版本之间甚至改变)。 其实,你不这样做,知道如果浏览器甚至使用标签单独的Win32窗口句柄,因为它可能只是有一个手柄,它的主窗口,并通过自身内部汲取一切(如Qt和WPF应用程序做到这一点,我相信尤其是歌剧这样做,而且很可能也是如此Safari浏览器)。

任何解决方案,这将是浏览器特定的。 你也许可以写出相应的对IE和Firefox的插件来传达信息给您的应用程序(虽然Firefox的插件是沙箱,所以我不知道,如果他们甚至能够做到IPC)。 我没有看到歌剧,Safari或Chrome的任何选项。



文章来源: Enumerate browser tabs from external application