BHO的创建-Window7 VS2010
一直以来,已经写过几个BHO控件,一段时间之后发现,只是记得大概流程,但是由于时间太长,已经不太能记得细节了,所以第二次写的时候就有些困难,明明已经正确生成,但是就是不能再加载项中发现,对于已经接触过的技术,实在是汗颜,于是决心记录下该项技术,以备不时之需
首先建立一个ATL项目
下一步,直接完成即可
其次呢,就是添加一个ATL简单对象,如下图所示
然后呢,就是添加ATL简单对象的过程
下一步,如下图所示
只需要填入简称,其他就会自动填好,这样就好,然后点击下一步,->下一步
需要注意的就是支持那一栏IObjectWithSite一定要勾上!!!
然后呢,就是创建类的成员变量和类的成员函数
- STDMETHOD(SetSite)(IUnknown*p);
- CComQIPtr<IWebBrowser2,&IID_IWebBrowser2>m_spWebBrowser;
- HRESULT Connecnt(BOOL);
- DWORD m_cookie;
- STDMETHODIMP Invoke(DISPID dispidMember,REFIID riid, LCID lcid,
- WORD wFlags, DISPPARAMS * pDispParams,
- VARIANT * pvarResult,EXCEPINFO * pexcepinfo,
- UINT * puArgErr);
其实,SetSite是IObjectWithSite接口的成员函数,然后呢,我们要将其记录下来,也就是IE浏览器的指针。然后再EyeOIE的cpp文件中写入如下代码
- STDMETHODIMP CEyeOnIE::SetSite(IUnknown*pSite)
- {
- m_spWebBrowser=pSite;
- if(m_spWebBrowser==NULL)
- {
- return E_INVALIDARG;
- }
- return Connecnt(true);
- }
- HRESULT CEyeOnIE::Connecnt(BOOL pB)
- {
- CComPtr<IConnectionPoint>spPC;
- CComQIPtr<IConnectionPointContainer,&IID_IConnectionPointContainer>spCPC(m_spWebBrowser);
- HRESULT hr=spCPC->FindConnectionPoint(DIID_DWebBrowserEvents2,&spPC);
- if(FAILED(hr))
- {
- return hr;
- }
- if(pB)
- {
- hr=spPC->Advise(reinterpret_cast<IDispatch*>(this),&m_cookie);
- }
- else
- {
- hr=spPC->Unadvise(m_cookie);
- }
- return hr;
- }
- STDMETHODIMP CEyeOnIE::Invoke(DISPID dispidMember,REFIID riid, LCID lcid,
- WORD wFlags, DISPPARAMS * pDispParams,
- VARIANT * pvarResult,EXCEPINFO * pexcepinfo,
- UINT * puArgErr)
- {
- USES_CONVERSION;
- if (!pDispParams)
- return E_INVALIDARG;
- switch (dispidMember)
- {
- case 250://DISPID_BEFORENAVIGATE2:
- break;
- case 252://DISPID_NAVIGATECOMPLETE2:
- break;
- case 259://DISPID_DOCUMENTCOMPLETE:
- ::MessageBoxA(NULL,"dada",0,0);
- break;
- default:
- break;
- }
- return S_OK;
- }
其实SetSite和Connect两个函数就是两个功能,一个是记录下IE浏览器的指针,然后呢就是,将浏览器指针强制类型转换,变成连接点管理器,然后,由得到的连接点管理器获得连接点,根据连接点,激活IE浏览器和BHO之间的通信,这样就完成了基本的操作,然后呢就是一些其他与BHO功能本身无关的代码了,但也是必须的
在dllmain.cpp文件中加入
- if (dwReason == DLL_PROCESS_ATTACH)
- {
- TCHAR pszLoader[MAX_PATH];
- //返回调用者模块的名称,第一个参数应为NULL,详见msdn。
- GetModuleFileName(NULL, pszLoader, MAX_PATH);
- _tcslwr(pszLoader);
- if (_tcsstr(pszLoader, _T("explorer.exe")))
- return FALSE;
- }
这样就避免了文件管理器加载该BHO插件,然后呢就是寻找EyeOnIE.rgs文件中加入一个注册表输出
- HKLM
- {
- SOFTWARE
- {
- Microsoft
- {
- Windows
- {
- CurrentVersion
- {
- Explorer
- {
- 'Browser Helper Objects'
- {
- {<strong>851FBDE4-1953-4B58-AF94-5D072F1E9ED1</strong>}
- }
- }
- }
- }
- }
- }
- }
上面加粗的内容呢就是该BHO的CLSID,该CLSID的定义在BhoPlugin.idl文件中,
将该文件中的CLSID替换掉EyeOnIE.rgs文件中即可,这样BHO的创建就完成了!!!
PS:::::我在进行网页信息的获取时,有时会将网页中的内容就录下来,想放在txt文档中,但是呢,代码是正确的,就是不执行,经过一系列的文件查找,发现必须使用管理员权限运行IE浏览器,才能执行,对于遇到同样问题的童鞋,予以提醒
BHO的创建-Window7 VS2010相关推荐
- C++ 使用VS2010创建MFC ActiveX工程项目
1.ActiveX的基本概念 ActiveX控件可以看作是一个极小的服务器应用程序,它不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行.这个容器包括WEB网页,应用程序窗体等... Activ ...
- 基于Delphi的BHO开发基础
在Windows操作系统上,我们最常见的浏览器有两种:文件浏览器(exploer.exe,应用于文件系统)和Internet浏览器(iexplore.exe,应用于互联网资源).由于这两个浏览器功能强 ...
- 反射(13)——C#开发BHO插件UrlTrack
最近忽然突发奇想,想统计一下我最经常上的网站是哪些,并且在这些网站上都停留了多久.为此决定写一个BHO插件来做这件事. BHO(Browser Help Objects)是实现了特定接口(IObjec ...
- java bho_COM组件应用(3)——BHO学习
1.什么叫BHO Browser Helper Objects,"浏览器帮助者对象",以下皆简称BHO. 2.支持BHO特性的系统一览表: Shell版本 操作系统版本 支持BHO ...
- Java bho插件_VC++开发BHO插件——定制你的浏览器 作者 陆其明
关键字 BHO Browser COM ATL 网址过滤 原作者姓名 陆其明 文章原始出处 http://hqtech.nease.net 读者评分 18 评分次数 4 正文 在Windows操作系统 ...
- 创建带界面UI的Activex
1.ActiveX的基本概念 ActiveX控件可以看作是一个极小的服务器应用程序,它不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行.这个容器包括WEB网页,应用程序窗体等... Activ ...
- TFS 2010 使用手册(二)项目集合与项目
1.项目集合 1.1 项目集合创建 打开TFS管理控制台,点击"团队项目集合". 图1点击"团队项目集合" 图2 点击"创建集合" 然后按照 ...
- C++调用Asprise OCR识别图片
在一个识别软件中发现了Asprise OCR的"身影",上官网查了一下相关信息,发现功能挺强大的,识别印刷体应该不错,遗憾的是好像不能识别中文,不过不知道它对扭曲后的英文识别能力怎 ...
- Silverlight 4新控件PivotViewer介绍
早在Silverlight 4正式版发布之前,微软发布PivotViewer控件的演示版本,其处理以及展示大批量数据的功能吸引不少开发人员和终端客户,今天微软发布了PivotViewer控件正式版本, ...
最新文章
- 【鸿蒙 HarmonyOS】Ability 中使用纯代码绘制布局及 UI 组件
- 高性能I/O设计模式Reactor和Proactor
- 玻璃质感_素描丨零基础,你也可以画出玻璃质感
- java取出连续子串_JAVA :在给定一个数组中,可以取得多个连续的子串。在众多子串中,求各元素和为最大值的连续子串...
- b站 实时弹幕和历史弹幕 Protobuf 格式解析
- K均值聚类关于初始聚类中心的探讨
- 微信又一期待已久的功能上线:是手残党的福音了
- Https背景与证书在spring boot项目中的使用
- python冒泡排序_python实现基本算法之冒泡排序(Bubble Sort)
- vue axios封装
- 怎样查看PPT中的字数
- [iuud8]ios不同版本下推送本地通知
- 小米手机android目录在哪里设置字体,在哪里修改小米手机的字体大小
- 《计算机程序的构造和解释》阅读笔记:准备(3)【python3简单实现lisp解释器(3)】
- 人工智能数学基础之函数与极限(无穷小与夹逼定理),附视频详解【菜鸟窝出品】
- 黑基网博客——网络安全、工具软件、无线智能设备、编程开发、网赚分享与交流基地
- 个人免签支付系统,2019完美的个人支付源码
- html 气泡动画效果,css3实现好看的气泡按钮动画特效
- 【Web前端笔记-基础】第八课·初识 CSS,CSS属性
- 《Joint 3D Face Reconstruction and Dense Alignment with Position Map Regression Network》论文学习笔记