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

时间:2015-01-06 15:53:45

标签: c++ firefox xpcom geckosdk

IE可让您从IWebBrowser2的IE框架轻松访问IHtmlDocument2HWND因此EnumWindowsEnumChildWindows然后你测试这个课程,一旦找到合适的课程,你就可以轻松地与他们互动。

  

如果有办法在"MozillaWindowClass" (包含HWNDXPCOM和C ++中列出所有打开的Mozilla Firefox标签?

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

1 个答案:

答案 0 :(得分:1)

  

您无法在外部使用C ++ / XPCOM,就像您在IE中使用COM一样,您只能在扩展程序的二进制组件中使用C ++ / XPCOM。 所以你赢了# 39;无需编写扩展即可完成此操作,此时,您可以更轻松地收听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的标签并用它来做任务。