全球旧事资料 分类
可以达到浏览之目的,无论Wi
dows资源管理器视图是单个的还是双视图形式。对于I
ter
etExplorer的情形,事情要更简单一些。只有你显式地多次运行iexploreexe浏览器时,你才有多个I
ter
etExplorer的拷贝。当你从I
ter
etExplorer中打开新的窗口时,每一个窗口在一个新的线程中被复制而不是创建一个新的进程,因此也就不需要重新载入BHO对象。首先,BHO最有趣的地方是,它是极度动态的。每次Wi
dows资源管理器或者I
ter
etExplorer打开,装载器从注册表中读取已安装的BHO对象的CLSID然后处理它们。如果你在打开的浏览器多个实例中间编辑注册表的话,你可以随着多个浏览器拷贝的载入而装入多个不同的BHO。这就是说,如果你选择从头创建一个新的属于自己的浏览器,那么你可以把它内嵌在一个VisualBasic或者MFC框架窗口中。同时你有相当的机会来灵活安排浏览程序。如果它们能满足你的需要的话,你可以依赖于I
ter
etExplorer的强大的功能并且加上你想要的尽可能多的插件。
五、关于IObjectWithSite接口TheIObjectWithSiteI
terface
从一个高起点来看,BHO即是一个DLL,它能够依附于I
ter
etExplorer浏览器的一个新建的实例,在某些情况下也适用于Wi
dows资源管理器。一般地,一个场所(site)是一个中间对象,它位于容器对象与被包容对象之间。通过它,容器对象管理被包容对象的内容,也因此使得对象的内部功能可用。为此,容器方要实现接口IoleClie
tSite,被包容对象要实现接口IOleObject。通过调用IOleObject提供的方法,容器对象使得被包容对象清楚地了解其HOST的环境。
f一旦容器对象成为I
ter
etExplorer(或是具有WEB能力的Wi
dows资源管理器),被包容对象只需实现一个轻型的IObjectWithSite接口。该接口提供了以下方法:
表三IObjectWithSite定义方法HRESULTSetSiteIU
k
ow
pU
kSite描述接收ie浏览器的IU
k
ow
指针。典型实现是保存该指针以备将来使用。
HRESULTGetSiteREFIIDriid,从通过SetSite方法设置的场所中接收并返回指定的接口,典voidppvSite型实现是查询前面保存的接口指针以进一步取得指定的接口。
对BHO的唯一严格的要求正在于必须实现这一个接口。注意你应该避免在调用以上任何一个函数时返回E_NOTIMPL。要么你不实现这一接口,要么应保证在调用这些方法时进行正确地编码。
六、构造自己的BHO对象Writi
gaBrowserHelperObject
一个BHO对象就是一个进程中服务器DLL,选用ATL创建它是再恰当不过的了。我们选择ATL的另外一个原因是因为它已经提供了缺省的而且提供了IObjectWithSite接口的足够好的实现。另r
好听全球资料 返回顶部