IE
提供从 IE 框架的 HWND
轻松访问 IWebBrowser2
和 IHtmlDocument2
. 因此,您可以使用 EnumWindows
和 EnumChildWindows
测试类,一旦找到合适的类,就可以轻松地与它们交互。
If there a way to list all open Mozilla Firefox tabs in a
"MozillaWindowClass"
(having itsHWND
), viaXPCOM
and C++?
我在谷歌上搜索了很长时间,但找不到关于这个主题的太多信息。我不想开发扩展/附加组件,但想从不相关的 EXE(而不是扩展 DLL)外部控制浏览器。或者至少对它有一些只读访问权限。
最佳答案
You can not use C++/XPCOM with Firefox externally like you use COM with IE, you can only use C++/XPCOM from within a binary component of your extension. So you won't be able to do it without writing an extension, and at that point it's easier to listen on tab events from JS and notify your binary component.
请注意,在 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/