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

2023-12-01

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

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

  1. 启用声音(我不喜欢)
  2. 观察窗口/选项卡/页面标题是否有交替闪烁的“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(使用前将#替换为@)

从外部应用程序枚举浏览器选项卡 的相关文章

  • 关闭弹出窗口后重新加载父页面

    我试图让用户通过弹出窗口登录 当他们单击弹出窗口的链接 这是一个 php 变量 时 他们可以登录 当窗口关闭时 我希望它重新加载他们最初所在的页面 父页面 这是signin php页面上的代码 但这所做的只是使登录页面成为用户所在的页面 我
  • 如何在浏览器控件中隐藏 HtmlElement

    我有一个 webbbrowser 控件 可以导航到包含图像的页面 我想从我的网络浏览器中隐藏或删除该图像 我尝试在 DocumentCompleted 事件上设置以下方法 但没有成功 webBrowser1 Document GetElem
  • JS中函数声明速度差异

    我运行了一个简单的 jsperf 测试 在 Firefox 中运行时一切都按预期进行 但当我在 Google Chrome 中运行测试时却感到困惑 该测试正在测试在 JavaScript 中声明函数然后调用它们的不同方式 我的猜测是 Chr
  • 如何使用 jQuery 禁用 Firefox 对所有图像的默认拖放行为?

    Firefox 有一个恼人的行为 它默认允许用户拖放任何图像元素 如何使用 jQuery 彻底禁用此默认行为 以下将在 Firefox 3 及更高版本中执行此操作 document on dragstart function return
  • 拖动调整大小手柄时多次触发调整大小事件

    我希望这个 jQuery 插件能够工作 但它没有 http andowebsit es blog noteslog com post how to fix the resize event in ie http andowebsit es
  • 为什么 Firefox 会忽略缓存标头并在刷新时重新验证?

    我有一些不可变的图像资源 可以永久缓存 Chrome 似乎尊重我的响应标头 并且不会重新验证资源 以下是 Chrome 中其中一项资源的示例 正如你所看到的 我包括cache control public max age expires e
  • 如何在 OS X 上的旧版 Safari 中测试我的网站?

    苹果似乎不提供旧版本 Safari 的下载 我什至不确定它们是否会安装在 Mac OS X 上 因为 Safari 似乎是操作系统的一部分 就像 Windows 上的 Internet Explorer 一样 有什么方法可以在旧版本的 Sa
  • 如何动态编译和加载外部java类? [复制]

    这个问题在这里已经有答案了 这个问题与我见过的许多问题类似 但大多数问题对于我正在做的事情来说不够具体 背景 我的程序的目的是让使用我的程序的人可以轻松地制作自定义 插件 然后编译并将它们加载到程序中以供使用 而不是在我的程序中实现不完整
  • [FLUTTER]滚动更改选项卡[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想构建这个用户界面 其中选项卡在某些滚动点上发生变化 请告诉我应该如何处理 是否有任何可用的包 UI LINK https www
  • 如何在 Javascript 中打开新标签?

    我想在新选项卡中打开我网站的页面 我尝试使用 window open 函数 但似乎不再支持它 这些是我在本地尝试过的一些选项 url localhost 3000 my other page window open url blank OR
  • 跨 HTML 窗口调用 Javascript 函数

    根据this https stackoverflow com questions 87359 can i pass a javascript variable to another browser window页面我应该能够调用子窗口的参数
  • 在显示选项卡栏控制器之前启动登录视图

    我有一个使用故事板开发的 ios5 应用程序 当前在初始启动时显示选项卡栏控制器视图 我想在显示选项卡栏控制器之前显示登录屏幕 用户输入用户名和密码 系统将验证用户身份 如果成功 则显示选项卡栏控制器 我尝试了以下 3 个选项 但没有成功
  • 如何在浏览器的新选项卡上显示Base64图像?

    我有 Base64 编码图像作为响应 如何使用 js 在浏览器的新选项卡中显示该图像 任何人都可以提出解决方案 谢谢 success function base64Image 假设你要得到一张 GIF 图像 Display a base64
  • 理解“窗口”对象[重复]

    这个问题在这里已经有答案了 可能的重复 JS 窗口全局对象 https stackoverflow com questions 10035771 js window global object 如何window对象工作 我知道它是顶级对象并
  • 使用代码中的 URL 启动 Microsoft Edge

    我需要从 C 应用程序使用特定 URL 启动 Microsoft Edge 浏览器 我怎样才能做到这一点 检索 Microsoft Edge 安装路径并通过适当的参数调用它的最佳方法是什么 我想直接启动它而不安装任何网络驱动程序 我看到了这
  • 使用window.open、document.open和document.write来显示XML(XML渲染消失了)

    这与另一个问题相关 但是not重复的 它涉及我已陷入僵局的拟议解决方案 我有以下代码 用于读取 XML 进行更改 打开一个窗口并将 XML 写入文档 问题是内容没有呈现为 XML 有什么方法可以设置内容类型等 让浏览器将内容处理为 XML
  • 如何使用子进程打开新的浏览器选项卡?

    我正在打开一个新的 IE 窗口 subprocess Popen r os environ PROGRAMFILES Internet Explorer IEXPLORE EXE Call URL 当 IE 关闭时这很好 但即使打开它也会生
  • jqueryui tabs:当内容垂直滚动时是否可以保持导航选项卡可见?

    我的 jqueryui 选项卡集由几页相当长的内容组成 用户必须垂直滚动才能浏览每个文档 这是一个简化版本 MAIN TEXT END NOTES blah blah blah lots more text the end 如果用户正在阅读
  • C# 如何使用 WM_GETTEXT / GetWindowText API / 窗口标题

    我想获取应用程序的控件 句柄的内容 这是实验代码 Process processes Process GetProcessesByName Notepad foreach Process p in processes StringBuild
  • Protractor 实例与浏览器

    我曾尝试查找类似的质量检查 但找不到令我满意的 所以基本上我看到在一些例子中它被使用 ptor protractor getInstance ptor get url 在其他一些示例中也使用了它 browser get url 所以问题是

随机推荐