通过IE
,可以轻松地从IE框架的IWebBrowser2
访问IHtmlDocument2
和HWND
。因此,您先EnumWindows
和EnumChildWindows
然后测试该类,一旦找到合适的类,就可以轻松地与它们进行交互。
是否可以通过"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/