在雷蒙德(Raymond)关于如何跳动某些外壳对象的demonstration中,他首先获得了IWebBrowser2
(或从技术上说是IWebBrowserApp
),然后使用QueryService
来获得{ {1}}。我想知道是否有人可以从概念上解释这两件事是什么以及它们之间的关系。是一个在浏览器窗口内另一个吗?感谢您提供任何信息。
答案 0 :(得分:0)
SID_STopLevelBrowser
只是一个GUID,它告诉QueryService
(在这种情况下)您感兴趣的是哪个层次结构对象。 IWebBrowser
和IShellBrowser
有什么区别。
IWebBrowser
是Internet Explorer对象,但是当Explorer.exe在Win98 / IE4中获得Web支持时,普通的Explorer.exe也获得了托管网页的能力(在Vista中已禁用/不赞成使用此功能)。另一方面,顶级(SID_STopLevelBrowser
)IShellBrowser
是承载IShellView
(所有版本的Explorer中的文件列表)的经典“宿主”对象:
由Shell视图(实现IShellView的对象)的主机实现。公开为视图所在的视图以及在资源管理器窗口的上下文中运行的其他对象提供服务的方法。
Windows 95的用户可以选择安装IE4,而无需更新外壳程序,并且在那些系统上,Explorer和Internet Explorer之间完全分开。
Raymond要求使用另一个浏览器对象,因为他需要调用IShellBrowser::QueryActiveShellView
才能访问shell视图以及IShellFolder
和PIDL的世界。
您可以将IShellBrowser
视为IWebBrowser
和/或IShellView
的宿主/容器,但请记住,IShellView
可以由第三方实现位于特殊的命名空间文件夹中,IShellBrowser
可以由第三方文件浏览器应用程序实现,因此您不能说IWebBrowser
和资源管理器窗口的其他部分紧密连接。
当QueryService
不知道您要的服务时,可以询问其客户端站点/主机/“父” /“子”。如果要获取“主”视图实例,则需要SID_STopLevelBrowser
。同样,您可以向顶级浏览器询问IE7 +中的SID_SShellBrowser
to get the current tab。