我可以通过XPCOM列出"MozillaWindowClass" HWND的选项卡吗?

Can I list Tabs of a "MozillaWindowClass" HWND via XPCOM?

本文关键字:选项 MozillaWindowClass 可以通过 XPCOM 列出 HWND      更新时间:2023-10-16

IE提供了从IE框架HWND轻松访问IWebBrowser2IHtmlDocument2因此,您EnumWindowsEnumChildWindows然后测试类,一旦找到合适的类,您可以轻松地与它们进行交互。

如果有办法通过XPCOM和C++列出"MozillaWindowClass"中所有打开的Mozilla Firefox选项卡(具有其HWND

我已经用谷歌搜索了很长时间,但找不到太多关于这个主题的信息。我不想开发扩展/附加组件,但想从不相关的 EXE 外部控制浏览器,而不是从扩展 DLL。或者至少对它有一些只读访问权限。

您不能像在IE中使用COM一样在外部将C++/XPCOM与Firefox一起使用,您只能在扩展的二进制组件中使用C++/XPCOM因此,如果不编写扩展,您将无法做到这一点,此时侦听来自JS的选项卡事件并通知您的二进制组件会更容易。

请注意,在FF中支持二进制组件是PITA,所以我不建议你在没有充分理由的情况下走这条路。

但是,一旦您拥有扩展和二进制组件,从选项卡中获取 HWND 的方法是这样的(希望它仍然有效,我们停止支持 FF 许多版本):

static HWND GetWndHandle(nsIXULWindow * window) {
    HWND hwnd = NULL;
    nsCOMPtr<nsIDocShell> docshell;
    nsresult res = window->GetDocShell(getter_AddRefs(docshell));
    if(NS_SUCCEEDED(res)) {
        nsCOMPtr<nsIBaseWindow> basewnd(do_QueryInterface(docshell));
        if(basewnd) {
            res = basewnd->GetParentNativeWindow((nativeWindow*)&hwnd);
            if(NS_FAILED(res)) hwnd = NULL;
        }
    }
    return hwnd;
}

有了这个和来自JS的通知,您的二进制组件可以提供查找以查找HWND的选项卡并使用它做一些事情。