IE
可让您从IWebBrowser2
的IE框架轻松访问IHtmlDocument2
和HWND
。因此EnumWindows
和EnumChildWindows
然后你测试这个课程,一旦找到合适的课程,你就可以轻松地与他们互动。
如果有办法在
"MozillaWindowClass"
(包含HWND
),XPCOM
和C ++中列出所有打开的Mozilla Firefox标签?
我已经google了很长时间,但是在这个主题上找不到多少。我不想开发扩展/附加组件,但想要从不相关的EXE外部控制浏览器,而不是从扩展DLL控制。或者至少是对它的一些只读访问权。
答案 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的标签并用它来做任务。