当前位置: 首页 > news >正文

BHO

浏览器辅助对象,全称BrowserHelperObject,以下简称BHO,就是我们常说的IE浏览器插件或加载项。它是微软推出的作为浏览器对第三方程序员开放交互接口的业界标准,利用BHO的交互接口,就可以在加载IE浏览器的同时进行相应的IE控制处理加载其它程序,实现与IE浏览器的交互。

实现原理

BHO的目的是为了更好的帮助程序员打造个性化浏览器,以及为程序提供更简洁的交互功能,现在很多IE个性化工具就是利用BHO的来实现。符合BHO接口标准的程序代码被写为DLL动态链接库形式在注册表里注册为COM对象还要在BHO接口的注册表入口处进行组件注册,以后每次IE启动时都会通过这里描述的注册信息调用加载这个DLL文件,而这个DLL文件就因此成为IE的一个模块(BHO组件),与IE共享一个运行周期,直到IE被关闭。

开发案例

下面采用VB6.0来创建BrowserHelperObject,实现记录IE浏览网址与日期时间。

详细过程如下:

2.1打开VB6.0,点击菜单栏[文件]--[新建工程],在弹出的[新建工程]页面中选择ActiveXDLL,保存工程为TestBHO.vbp;

2.2将类模块中的Class1改名为TestB-HO并保存为TestBHO.cls;

2.3点击菜单栏[工程]--[引用],选择引用“VBShellLibrary”(VBSHELL.TLB)、“Mi-crosoftHTMLObjectLibrary”(MSHTML.TLB)、“MicrosoftInternetControls”(shdocvw.dll);

2.4在类模块TestBHO.cls中添加核心接口代码,实现与IE的接口;

2.5生成接口dll文件TestBHO.dll并复制到系统system32目录下;

2.6运行"regsvr32TestBHO.dll"注册TestBHO.dll文件,然后打开注册表,通过查找TestBHO.dll,找到其CLSID,再从注册表中找到接口,在其下新建项,项名为TestBHO.dll的CLSID;

2.7新打开一个IE浏览器,打开几个网页,再查看C:\bho.txt文件,是不是已经记录了你浏览的网页地址,效果如何?

至此,这个BHO接口已经完成,每次新打开一个IE窗口,都会加载TestBHO.dll,每打开一个网页,都会将上网日期时间、网页地址记录到C:\bho.txt中,关闭IE窗口时,TestBHO.dll也会自动关闭,不再运行记录网址。

应用

目前,BHO技术已经广泛应用于互联网程序开发中,实现的功能也多种多样,包括网页内容过滤、自动填单、广告拦截、上网行为监控、网页翻译等功能,大家熟知的软件像百度工具条、迅雷等工具都利用了BHO技术,甚至很多病毒、木马、流氓软件也都利用了这种技术,当然,清理它们的杀毒软件,专杀工具也要利用此技术,所以掌握这种技术对相关程序开发很有帮助。

相关文章:

  • 开放平台
  • js(=>) 箭头函数
  • JavaScript中的回调函数(callback)
  • com教程(使用VS2015编写ATL示例)
  • 控制台console使用MFC库函数,Cout输出CString的方法
  • PDFsharp使用介绍
  • 详解开源免费且稳定实用的.NET PDF打印组件itextSharp
  • 机器人是什么
  • C++中L和_T()之区别
  • 关于 wcout 输出中文的问题
  • 非静态成员必须与特定对象相对
  • 压缩文件修复
  • 循环冗余校验(CRC)算法入门引导
  • C++ getline函数用法详解
  • cout后面输出时加endl和不加endl的区别
  • CentOS7 安装JDK
  • Docker下部署自己的LNMP工作环境
  • GraphQL学习过程应该是这样的
  • Hibernate最全面试题
  • JavaScript HTML DOM
  • Java面向对象及其三大特征
  • php的插入排序,通过双层for循环
  • Python socket服务器端、客户端传送信息
  • spring security oauth2 password授权模式
  • use Google search engine
  • 订阅Forge Viewer所有的事件
  • 对JS继承的一点思考
  • 分类模型——Logistics Regression
  • 记一次删除Git记录中的大文件的过程
  • 老板让我十分钟上手nx-admin
  • 设计模式走一遍---观察者模式
  • 时间复杂度与空间复杂度分析
  • 网页视频流m3u8/ts视频下载
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 仓管云——企业云erp功能有哪些?
  • #Java第九次作业--输入输出流和文件操作
  • #QT项目实战(天气预报)
  • #宝哥教你#查看jquery绑定的事件函数
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • $L^p$ 调和函数恒为零
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附表设计)不是我吹!超级全面的权限系统设计方案面世了
  • (附源码)springboot 房产中介系统 毕业设计 312341
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • .bashrc在哪里,alias妙用
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • .NET DataGridView数据绑定说明
  • .NET 发展历程
  • .net 中viewstate的原理和使用