0

IE提供对 IE 框架的轻松访问IWebBrowser2IHtmlDocument2HWNDIE 框架访问。所以你EnumWindowsEnumChildWindows然后你测试这个类,一旦你找到合适的,你就可以轻松地与他们互动。

如果有办法列出所有打开的 Mozilla Firefox 选项卡"MozillaWindowClass" (有它的HWND、viaXPCOM和 C++?

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

4

1 回答 1

1

你不能在外部使用 C++/XPCOM 和 Firefox,就像你使用 COM 和 IE 一样,你只能在扩展的二进制组件中使用 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 查找选项卡并使用它进行操作。

于 2015-01-06T16:20:08.517 回答