【问题标题】:Can I list Tabs of a "MozillaWindowClass" HWND via XPCOM?我可以通过 XPCOM 列出“MozillaWindowClass”HWND 的选项卡吗?
【发布时间】:2015-01-06 15:53:45
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ firefox xpcom geckosdk


    【解决方案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 查找选项卡并对其进行处理。

    【讨论】:

      猜你喜欢
      • 2010-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多