2015-01-06 66 views
0

IE提供從IE框架的HWND輕鬆訪問IWebBrowser2IHtmlDocument2所以你EnumWindowsEnumChildWindows然後你測試這個類,一旦你找到了正確的類,你可以很容易地與它們交互。我可以通過XPCOM列出「MozillaWindowClass」HWND的選項卡嗎?

如果有辦法列出一個"MozillaWindowClass"所有打開的Mozilla Firefox的標籤(有其HWND,通過XPCOM和C++?

我已經搜索了很長很長但很難找到的主題。我不想開發擴展/附加組件,但想從外部控制來自不相關EXE的瀏覽器,而不是來自擴展DLL。或者至少對其進行一些只讀訪問。

回答

1

就像您使用COM與IE無法C++/XPCOM使用與Firefox外,你只能使用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的選項卡並對其執行任何操作。

相關問題