开发者社区> 长征2号> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

定制IE浏览器的尖兵利器 - BHO

简介:
+关注继续查看
   IE浏览器是当前使用人数最广的浏览器, 本文主要来讲述如何来打造我们自己特色的浏览器, 自定义工具栏按钮, 自定义网页的右击菜单, BHO技术与IE浏览器. 本文写作过程中参考不少网络上的相关资料, 我将在最后的参考资料中列出这些文章.

自定义工具栏按钮

我们经常看到迅雷, 网际快车(FlashGet)等软件安装后会向IE的工具条添加自己的按钮。按下按钮后还会作出相应的动作,这种功能是如何实现的呢?

基本原理:
从IE5开始便允许我们向工具栏添加自己的按钮,其本质就是修改注册表,添加创建此按钮所需的信息。


实现步骤:
1.创建此按钮的GUID(globally unique identifier)
你可以通过Visual Studio中的Guidgen.exe来产生GUID。
例如我生成的GUID是{1FBA04EE-3024-11D2-8F1F-0000F87ABD16}
以下的例子中我都使用这个GUID来作说明。


2.创建子键HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explorer\Extensions\{1FBA04EE-3024-11D2-8F1F-0000F87ABD16}


3.在此子键下创建如下字串值。
(1)CLSID
这是IE的CLSID,其值必须为{1FBA04EE-3024-11D2-8F1F-0000F87ABD16}
(2)Default Visible
指明此按钮默认状态下是否可见,Yes表示可见,No为不可见
(3)ButtonText
按钮文字
(4)Icon
默认状态下的图标全路径,例如c:\vckbase.ico。也可以是EXE文件中包含的图标,例如:C:\PROGRA~1\NETANTS\NetAnts.exe,1000(后面的1000是指EXE文件中该图标文件对应的资源ID)
(5)HotIcon
鼠标移到按钮上时的图标全路径

 我的自定义IE工具栏视频监控按钮

如下子键为按下按钮后需要执行的相应动作:可以是COM对象、浏览条Explorer Bar、脚本Script、可执行文件。
下面我们逐个进行介绍。


①COM对象
你需要建立名为ClsidExtension的字串值,其值应该为此COM对象的GUID
例如金山词霸就使用ClsidExtension来调用自己的COM对象。


②浏览条Explorer Bar
所谓浏览条就是类似我们按下往IE历史按钮后打开的历史记录列表,其本质好比MFC中的CReBar对象。 浏览条也可以自己制作,
因为超出了本文的范围,暂不作讲解。 
为了在按下按钮后打开一个浏览条,你需要建立名为BandCLSID的字串值,其值为浏览条的CLSID


③脚本Script
按下按钮后执行的脚本,例如:"%SystemRoot%\web\related.htm"
你可以在这个HTML文件里面加上脚本来得到IE当前的许多信息,需要注意的是假如你想通过Script打开非脚本的HTML文件是不可行的。

 

④可执行文件
假如我们想让IE在按下按钮后执行一个可执行文件, 你可以增加名为Exec的字串值,其值为此可执行文件的全路径,
例如c:\windows\notepad.exe或者是一个网址如http://wwww.cnblogs.com . 最终效果如下

自定义IE工具栏按钮 

 

自定义网页的右击菜单

我们经常看到页面右击菜单中的如迅雷下载所有链接, 百度搜藏, 乃至到收藏此页到【博客园网摘】; 这些是如何实现的呢? 其实很简单, 一句话修改注册表即可.

一、在IE菜单中加入菜单项
在注册表HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt项下建立一个新项,项的名称即为出现在菜单中的标题
将新建项的默认值设定为一个URL地址,当用户点击菜单项后,IE就会调用URL指向的页面中的脚本。举例说明, 收藏此页到【博客园网摘】中其URL地址: http://wz.cnblogs.com/rightclick/, 对应页面就简单一个JavaScript脚本, 大家如果感兴趣可以查看一下其源代码内容.

二、如何控制菜单项在合适的时候显示
下面再介绍一下上面注册项中Contexts项的作用,通过该项可以制定菜单项在右键点击IE中的什么对象时出现,它可以为以下的值或其组合值

对象
缺省CONTEXT_MENU_DEFAULT 0x1
图片CONTEXT_MENU_IMAGE 0x2
控件CONTEXT_MENU_CONTROL 0x4
表单域 0x8
选择文本CONTEXT_MENU_TEXTSELECT 0x10
锚点CONTEXT_MENU_ANCHOR 0x20
超链接 0x22
右键点击网页中除上以外的地方显示该项
CONTEXT_MENU_UNKNOWN
0x40

 

例如上面我们希望菜单项在用户点击图片或者超链接时出现,那么我们就将值设置为

dword:00000022

既在点击图片 或者 锚点时出现菜单。一个锚点是页面中描述一个超链接的对象。如果不设置Contexts 项,则菜单项会在点击任何对象时出现在右键菜单中。收藏此页到博客园网摘功能就是缺省设置.

 

BHO

BHO(浏览器辅助对象)是一种简单的ATL COM对象,而Internet Explorer会在每次运行时都加载它;换句话来说,即每个Internet Explorer的实例都会加载它。BHO运行在Internet Explorer的地址空间内,能对可访问的对象(如窗口、模块等等)执行任何操作,且因为它依附于浏览器的主窗口,所以其生命期与浏览器实例的生命期一致。

  如果在系统中打开了活动桌面,BHO也能随同Windows Explorer一起启动。如果不想在Windows Explorer中运行BHO,可将如下代码添加到DLLMain中:

TCHAR strLoader[MAX_PATH];

::GetModuleFileName (NULL, strLoader, MAX_PATH);
if(stricmp("explorer.exe", strLoader) == 0)
return FALSE;

  BHO的COM Server必须实现IObjectWithSite,以便对象可以挂钩到浏览器事件,Internet Explorer会依靠IObjectWithSite将一个指针传递到它的IUnknown接口,所以,只需实现IObjectWithSite的SetSite方法就行了.

 

参考浏览器帮助程序对象

http://msdn.microsoft.com/library/techart/bho.htm

IWebBrowser2::ShowBrowserBar 方法

http://msdn.microsoft.com/workshop/browser/webbrowser/reference/IFaces/IWebBrowser2/ShowBrowserBar.asp

Browser Helper Objects: The Browser the Way You Want It

如何使用BHO定制你的Internet Explorer浏览器

IHTMLSelectionObject2 Interface

http://msdn.microsoft.com/en-us/library/aa768843(VS.85).aspx

ActiveX Security: Improvements and Best Practices

http://msdn.microsoft.com/en-us/library/bb250471(VS.85).aspx#psd

Building Browser Helper Objects with Visual Studio 2005

http://msdn.microsoft.com/en-us/library/bb250489(VS.85).aspx

BHO,好厉害的东东

VC++开发BHO插件——定制你的浏览器  作者 陆其明

 

参考阅读文档:

浏览器的定制与扩展

用VC6实现IE工具栏

如何往IE工具条添加按钮

如何提取网页中所有链接

采集网页选定部分全攻略

如何获取网页密码框中的密码

如何禁用HTML页面的上下文菜单

如何使用BHO定制你的Internet Explorer浏览器

ATL 实现定制的 IE 浏览器栏、工具栏和桌面工具栏


本文转自peterzb博客园博客,原文链接:http://www.cnblogs.com/peterzb/archive/2009/08/01/1536740.html,如需转载请自行联系原作者。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
B/S开发中浏览器的工具利器
B/S系统的前端浏览器性能和标准兼容方面是开发中的一个重要问题,把IE中使用的各种工具整理一下,对于开发中标准、规范检查等起到一个作用   主要是三个主流的浏览器和相关的插件 FireFox Firefox-latest.
532 0
Chrome 私人珍藏-AdBlock插件实现浏览器广告屏蔽,超强力
Chrome 私人珍藏-AdBlock插件实现浏览器广告屏蔽,超强力
0 0
chrome系列-扩展程序开发学习-从无到有
本来是想做一个图床,然后在chrome扩展中添加上,但是发现chrome的扩展有点毫无头绪,只能从头练习,从头学了。
0 0
Selenium在Win10下三款主流浏览器的单页执行时间(火狐、IE和Chrome)
开发环境:Win10+Python3.5+Selenium2.53.6+IE11,均为64 bit硬件环境:联想MIIX700语言环境:English(US) 浏览器:Firefox(46.
752 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
基于浏览器的实时构建探索之路--玄寂
立即下载
基于浏览器的实时构建探索之路
立即下载
函数计算最佳实践:快速开发一个分布式 Puppeteer 网页截图服务
立即下载