没有合适的资源?快使用搜索试试~ 我知道了~
首页VC++开发BHO插件——定制你的浏览器
VC++开发BHO插件——定制你的浏览器

利用vc++进行BHO编写,成功创建的BHO,不仅可以得到各种标准的浏览器操作事件,并做出响应;还可以定制浏览器的菜单、工具条等界面元素;更或者可以安装钩子函数,监视浏览器的一举一动。值得注意的是,使用BHO插件,Internet浏览器要求在4.0以上版本;如果是文件浏览器,操作系统要求是Windows 95/98/2000或Window NT 4.0以上版本,并且Shell的版本在4.71以上。下面是支持BHO特性的系统一览表:
资源详情
资源评论
资源推荐

文章原始出处
正文
在 操作系统上,我们最常见的浏览器有两种:文件浏览器( ,应用
于文件系统)和 浏览器(,应用于互联网资源)。由于这两个浏览器
功能强大,而且又与 操作系统捆绑销售,最终也就成为了浏览器的标准。但有时
候,为了给浏览器加入一些新的特性,我们往往会重新设计一个自己的浏览器。新的浏览
器模仿标准浏览器的大部分功能,同时加入新特性。这种做法最直观,但实际上也是相对
于微软的重复劳动,且工作量比较大。其实,使用 插件,一切都变得很简单。
(),是实现了特定接口的 组件。开发好的 插件
在注册表特定的位置注册好后,每当微软的浏览器启动, 实例就会被创建。在浏览器
工作的工程中, 会接收到很多事件,比如浏览器浏览新的地址、前进或后退、生成新
的窗口、浏览器退出等等; 可以在这些事件的响应中实现与浏览器的交互。
下面,我们首先来介绍一下 的工作原理。上面我们已经提到, 是 组件,
而且一定实现了 接口。这些组件除了在注册表中注册为 外,
还 必 须 将 它 们 的 ! 在 "#$% & %&'#()*&+#(,((
-.(#( 下注册为子键。微软在设计浏览器的时
候,已经给这些组件预留了空间。每当浏览器启动时,浏览器会首先在上述注册表位置查
看是否有注册的 !;如果有则分别创建一个实例,并对 实例进行初始化,
建立交互连接。(注: 实例只有在创建它的浏览器窗口销毁时才被释放。)下图演示
了 的创建过程:
成功创建的 ,不仅可以得到各种标准的浏览器操作事件,并做出响应;还可以定制浏
览器的菜单、工具条等界面元素;更或者可以安装钩子函数,监视浏览器的一举一动。值
得注意的是,使用 插件, 浏览器要求在 /0 以上版本;如果是文件浏览器,
操作系统要求是 12134000 或 '*/0 以上版本,并且 的版本在
/56 以上。下面是支持 特性的系统一览表:
版本操作系统版本支持
/0012'*/0(# 版本为/0)仅 #/0
/5612'*/0(# 版本为/0)# 和文件浏览器
/5413# 和文件浏览器
200774000# 和文件浏览器
接下去,笔者就来介绍一下如何开发 插件,开发环境为 .80(使用 &* ),安装
9,: !" 中 的 !: !" 。 首 先 , 启 动 . 的 &*
&;,生成一个项目名为 9-<,其余均采用默认设置。接着,我们就来分步
详细阐述。
第一步,增加一个 &* 到该项目中。. 菜单 =>'&* ?,在弹出
的对话框中选择“ #@ ,输 入 类 名 ( 在 ': 后输 入
#A#,其它各项会自动生成)。完成后,我们可以看到 #A# 类有一个基类

:,这个就是实现 接口的模版类。
第二步,实现 的接口方法。在这之前,我们要先定义几个成员变量:
:B9:4,(需要加入 C-D#!D),用以保存浏览器组件
的指针;!+!:E,用以保存与浏览器的连接 !。 有两个接口方
法: 和 F。我们只需重载 就行了。在 #A# 中增加函数声明
*!#*!GHGIEJIEH,在 #A# 实现如下:
*!#*!9#A#GIEJIEH
K
I#%'.#+'L
,GIEH
K
:4MIEL
,G:4H
K
-+<#G*+I#HL
N
N
-#%)& L
N
+#I *#A#+<#G &H
K
:9O9>9L
+,
:B9O9P Q!%9>
9G:4HL
+#I *M9=>)9G!!%!#4PQ9HL
,G)& #!GHH
-L
,G&H
K
9
M9=>&G%O!J>GHPQ:EHL
N
K
9=>IG:EHL
N
-L
N
我们可以看到, 的参数实际上指向的是浏览器组件。在 实现中,我们首先
保存浏览器组件指针,然后将该 向浏览器注册为事件处理器。

第三步,实现 ! 接口方法。事件处理也就在 !E 中实现(各个事件
的 ! 在 #!! 中定义)。 可能会接收到很多事件,但我们只需要响应我们感兴
趣的那一部分。首先在 #A# 中增加该函数的声明,在 #A# 的实现中,笔者
试着响应浏览器浏览一个地址之前发出的事件 !9!%#)+#'&.F&*#4,以此来实
现简单的网址过滤功能,代码参考如下:
*!#*!9#A#EG!9!:P+#)!P !P
+!)<P!99&+&J!9:P
.&+&'*J+-P#R#9')J,P
I'*J-&<#H
K
I#%'.#+'L
,GS!9:H
-#%'.& !&+FL
G:H
K
*:,!9!,
T0U,<=.*%$+#)V.*%
T6U**9=.*%$+#)V.*%.&+&'*
T4U&,**99*=.*%$+#)V.*%.&+&'*
TWU*<,::=.*%$+#)V.*%.&+&'*
T/U,<=.*%$+#)V.*%.&+&'*
T2UI+ <=.*%$+#)V.*%.&+&'*
T8U&-=,:
<
!9!%#)+#'&.F&*#4
K
9 #*+I+ M'I L
:4=><% I+ GQI+ HL
J-L
, G!9:=>&< >M 2 QQ !9:=><<T2U MM G.*%$+#)V
.*%.&+&'*HH
K
:.I+ GJ!9:=><<T2U.HL
I+ <*AG.*%*+HL
-M #4&GI+ .HL
N
,GG-PD<:DHH
K
J!9:=><<T0U.M*+I#L
<G'I P%*GD该网页已被禁止SDHP%*GD<DHP%'*9HL

-%"L
N
EL
N
!9!%'&.F&*#9 #*#4
EL
!9!%!I#'*9 #*#
EL
!9!%!' &!#F'
EL
!9!%!' &!9 #*#
EL
!9!%'#'!4
EL
!9!%BI*
+<#G)& #HL
EL
,-
EL
N
-%"L
N
我们看到,当用户浏览的新地址包含D<:D字符的时候,浏览器就会弹出一个警告对话
框,并且停止进一步的动作。另外值得注意的是,在 !9!%BI* 事件(浏览器将要退
出)的响应中,我们将 事件处理器进行了注销。
第四步,因为 可能会被文件浏览器加载。如果我们不想这样,我们就要在 ! 中
对加载者进行判断,参考如下:
DD
'&9 !G'*&'# P !+! +P 9.!
J+JH
K
,G+MM! %9+#%&**&H
K
EXX<-
,XX#DED
*&+; T&R%9&*UL
F-)':G'I P; P&R%9&*HL
%G; HL
,G%G; P%*GDDHHH
-)& #L
%-GPPQ !%9 IF' HL

!* AGHL
N
,G+MM! %9+#%!#*&H
%-*:GHL
-*+I#LE
N
最后,别忘了修改注册表文件,追加 的注册信息。在 #A#< 文件的下面增加
如下代码:
"
K
)*&+#
K
,
K
K
-.
K
#
K
XXXX
K
K8#43WW1=5&4&=/58==/8&2W534W51N
N
N
N
N
N
N
N
注意,K8#43WW1=5&4&=/58==/8&2W534W51N是笔者这个 的 !,如果
你自己开发 ,这里应该正确填写你的 !。
好了,一个简单的 开发完成了。(可以到本人的个人主页下
载实例源代码。) 插件可以实现的功能还有很多,比如网页内容分析、# 界面定制等
等。作为总结,笔者还要提醒读者一点的是,如果不想让 起作用了,可以注销该插
件 , 如 下 格 式 : <W4-A-(A- , 或 者 直 接 在 注 册 表 中 将 “
@目录下注册的 ! 删掉。
正文完
如何使用 BHO 定制你的 Internet Explorer 浏览器
剩余22页未读,继续阅读











安全验证
文档复制为VIP权益,开通VIP直接复制

评论13