您的位置:逆风者 VC++ 正文
 添加时间:2007-09-01 原文发表:2007-08-31 人气:159 来源:vckbase.com

本文章共11714字,分8页,当前第2页,快速翻页:
 


图一 ie浏览器如何装入和初始化BHO对象,BHO场所(site)是用于实现通信的COM接口
逆风者

  浏览器可能在注册表中发现一系列的CLSID,并由此为每个CLSID建立一个进程中实例。结果是,这些对象被装载至浏览器上下文中并运行起来,好象它们是本地组件一样。但是,由于Internet Explorer的COM特性,即使被装入到它的进程空间中于事(你的野心实现)也不一定会有多大帮助。用另一说法, BHO的确能够做许多潜在的有用的事情,如子类化组成窗口或者安装线程局部钩子,但是它确实远离浏览器的核心活动。为了钩住浏览器的事件或者自动化浏览器,BHO需要建立一个私有的基于COM的通讯通道。为此,该BHO应该实现一个称为IObjectWithSite的接口。事实上,通过接口IobjectWithSite, Internet Explorer 可以传递它的IUnknown 接口。BHO反过来能够存储该接口并进一步查询更专门的接口,如IWebBrowser2、IDispatch和IConnectionPointContainer。
  另外一种分析BHO对象的途径与Internet Explorer外壳扩展有关。我们知道,一个WINDOWS外壳扩展即是一个进程内的COM服务器,它在Windows资源管理器执行某种动作时装入内存――如显示上下文菜单。通过建立一个实现几个COM接口的COM模块,你就给上下文菜单加上一些项并能预以正确处理。一个外壳扩展必须以Windows资源管理器能够发现的方法注册。一个BHO对象遵循同样的模式――唯一的改变在于要实现的接口。然而,尽管实现方式有所不同,外壳扩展与 BHO 仍有许多共同的特点。如下表一:

表一 外壳扩展与 BHO相近特性比较
特性 外壳扩展 BHO对象 加载者 Windows资源管理器 Internet Explorer(和外壳4.17及以上版本的Windows资源管理器) 击活动作 在某类文档上的用户动作(即单击右键) 打开浏览器窗口 何时卸载 参考计数达到0的几秒之后 导致它加载的窗口关闭时 实现形式 COM进程中DLL COM 进程中 DLL 注册需求 常常是为一个COM服务器设置的入口处,另加的入口依赖于外壳类型及它要应用至的文档类型 常常是为一个COM服务器设置的入口处,另加一个把它申请为BHO的注册入口 接口需求 依赖于外壳扩展的类型 IObjectWithSite

如果你对SHELL扩展编程有兴趣的话,可以参考MSDN有关资料。

四、BHO的生存周期
  前面已经说过,BHO不仅仅为Internet Explorer所支持。如果你在使用外壳 4.71或者更高版本,你的BHO对象也会被Windows资源管理器所加载。下表二展示了我们可以使用的不同版本的外壳产品情况,Windows外壳版本号存于库文件shell32.dll中。

表二 不同版本的Windows外壳对于BHO的支持情况
外壳版本 安装的产品 BHO的支持情况 4.00 Windows 95,Windows NT 4.0 带或不带 Internet Explorer 4.0 或更老版本。 注意没有安装外壳更新 Internet Explorer 4.0 4.71 Windows 95,Windows NT 4.0 带Internet Explorer 4.0 和活动桌面外壳更新 Internet Explorer 与Windows 资源管理器 4.72 Windows 98 Internet Explorer与Windows 资源管理器 5.00 Windows 2000 Internet Explorer与Windows 资源管理器
 

本文章更多内容<<上一页 - 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 下一页>>
相关文章

使用socket套接字时的两点经验
Visual Basic .NET 中多 Windows 窗体的同步
可以替代系统记事本的程序
论程序设计方法
图形显示特技算法
SQL Server 索引结构及其使用(三)
简单实用的Xml解析类
一个实用的CToolBar扩展类CToolBarEx
定时显示远程计算机的桌面
《系统飞狐》系列软件中的“系统监视器”开
DLL初学者指南(非MFC)
VC中基于 Windows 的精确定时
模拟 Windows 下 CPU 占用率的控件及其实现
自动隐藏停泊窗体实现
Buffer Overruns,portability和其它...
在你的程序中如何使用CButtonST类
QQ2006 界面编程之鸡蛋里挑骨头
用 Web 服务进行二进制序列化和 BinaryForm
DLL头文件的格式和应用
如何在 C# 中加载自己编写的动态链接库

相关评论


本文章所属分类:首页 VC++

  热门关键字: