簡體   English   中英

我可以通過XPCOM列出“ MozillaWindowClass” HWND的選項卡嗎?

[英]Can I list Tabs of a “MozillaWindowClass” HWND via XPCOM?

IE提供了從IE框架的HWND輕松訪問IWebBrowser2IHtmlDocument2 因此,您可以使用EnumWindowsEnumChildWindows ,然后測試該類,一旦找到正確的類,就可以輕松地與它們進行交互。

是否HWND通過XPCOM和C ++在"MozillaWindowClass" (具有其HWND )中列出所有打開的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查找選項卡並對其進行處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM