有点奇怪(具有挑战性?)的问题。是否可以从外部应用程序以编程方式访问打开的浏览器的选项卡?我知道这是一个模糊的问题,但请听我说完:
我正在尝试创建一个“Gmail 聊天通知程序”应用程序,当存在未答复的聊天消息时,该应用程序会在 Windows 系统托盘中闪烁通知图标。目前,据我所知,唯一内置的 Gmail 聊天通知是:
- 启用声音(我不喜欢)
- 观察窗口/选项卡/页面标题是否有交替闪烁的“Gmail”/“废话说...”消息。
#2 的问题是:当浏览器窗口最小化并且 Gmail 选项卡不是active浏览器中的选项卡,窗口标题没有改变,我没有注意到新的聊天消息。
所以我想创建一个为我监视选项卡标题的应用程序。 (所有选项卡标题,不仅仅是窗口标题,它只是活动选项卡标题。)我创建了一个概念验证 C# 应用程序,通过枚举活动 Windows 进程并观察闪烁的“Blah”来检测未答复的聊天消息。窗口标题中说...”:
Process[] procs = Process.GetProcesses();
IntPtr hWnd;
foreach (Process proc in procs)
if ((hWnd = proc.MainWindowHandle) != IntPtr.Zero)
if (proc.MainWindowTitle.IndexOf(" says… ") >= 0)
...
但明显的问题是,当 Gmail 选项卡不是活动/聚焦选项卡时,它就不起作用(因为它只查看窗口标题)。所以我需要一些可以更深入地挖掘并查看选项卡标题的东西。
我对任何事情都持开放态度。我一直在想什么might工作是找到一种方法以某种方式枚举浏览器的选项卡(MDI子窗口?*手指交叉*),但也许这根本不可能:)如果有办法做到这一点,我也愿意接受其他解决方案,例如,Firefox 插件或其他东西(但最好能与 Windows 系统托盘集成,而不仅仅是存在于浏览器沙箱中)。
有人可以帮助我开始吗?提前非常感谢。
一般情况下是不可能的。浏览器选项卡不必是 MDI 子窗口(事实上,它们几乎肯定不是)。您不知道任意浏览器的窗口树,因此您无法解析它并找出选项卡(即使您知道特定浏览器的窗口树,它绝对是一个实现细节,即使在次要版本之间也可能会发生变化)。事实上,您不知道浏览器是否为选项卡使用单独的 Win32 窗口句柄,因为它可能只有一个主窗口句柄,并自行绘制内部的所有内容(例如 Qt 和 WPF 应用程序就是这样做的,我相信Opera 尤其做到了这一点,Safari 可能也是如此)。
任何解决方案都必须针对特定浏览器。您可能可以为 IE 和 Firefox 编写相应的插件,以将该信息传递给您的应用程序(尽管 Firefox 插件是沙盒的,所以我不确定它们是否能够执行 IPC)。我没有看到任何适用于 Opera、Safari 或 Chrome 的选项。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)