c++ - 我可以通过 XPCOM 列出 "MozillaWindowClass"HWND 的标签吗?

标签 c++ firefox xpcom geckosdk

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

If there a way to list all open Mozilla Firefox tabs in a "MozillaWindowClass" (having its HWND), via XPCOM and C++?

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

最佳答案

You can not use C++/XPCOM with Firefox externally like you use COM with IE, you can only use C++/XPCOM from within a binary component of your extension. So you won't be able to do it without writing an extension, and at that point it's easier to listen on tab events from JS and notify your binary component.

请注意,在 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 的选项卡并使用它做一些事情。

关于c++ - 我可以通过 XPCOM 列出 "MozillaWindowClass"HWND 的标签吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27802268/

相关文章:

css - 你如何在 Firefox 中设置 contentEditable 的样式?

css - 文本每个字符前进几个像素

javascript - 用于 XML 文档的 getElementById,Mozilla 扩展

javascript - 访问 JSM 中的窗口对象

c++ - 在类中声明成员时,指针是否比实例更好?

c++ - Visual Studio C++ intellisense 函数信息 - 如何解释各种分隔符、类型和首字母缩略词

C++ 部分模板特化和多符号定义错误

c++ - 使用带有递归的 std::variant,而不使用 boost::recursive_wrapper

html - 浏览器正在加载两张图片——一张用于 srcset,一张用于 src(Chrome 41 等)

javascript - 如何更改对话框窗口的确定/取消按钮的标签?