通过IE,可以轻松地从IE框架的IWebBrowser2访问IHtmlDocument2HWND。因此,您先EnumWindowsEnumChildWindows然后测试该类,一旦找到合适的类,就可以轻松地与它们进行交互。


  是否可以通过"MozillaWindowClass"和C ++在HWND(具有XPCOM)中列出所有打开的Mozilla Firefox选项卡?


我已经在Google上搜索了很长时间,但是在这个问题上找不到很多东西。我不想开发扩展程序/附加组件,但希望从不相关的EXE(而不是扩展DLL)外部控制浏览器。或至少对其具有某些只读访问权限。

最佳答案

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


请注意,在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/

10-11 19:36
查看更多