BHO的创建-Window7 VS2010

 一直以来,已经写过几个BHO控件,一段时间之后发现,只是记得大概流程,但是由于时间太长,已经不太能记得细节了,所以第二次写的时候就有些困难,明明已经正确生成,但是就是不能再加载项中发现,对于已经接触过的技术,实在是汗颜,于是决心记录下该项技术,以备不时之需

       首先建立一个ATL项目

       

     下一步,直接完成即可

  

     其次呢,就是添加一个ATL简单对象,如下图所示

   然后呢,就是添加ATL简单对象的过程

   

    下一步,如下图所示

   

    只需要填入简称,其他就会自动填好,这样就好,然后点击下一步,->下一步

需要注意的就是支持那一栏IObjectWithSite一定要勾上!!!

然后呢,就是创建类的成员变量和类的成员函数

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. STDMETHOD(SetSite)(IUnknown*p);  
  2. CComQIPtr<IWebBrowser2,&IID_IWebBrowser2>m_spWebBrowser;  
  3. HRESULT Connecnt(BOOL);  
  4. DWORD m_cookie;  
  5. STDMETHODIMP Invoke(DISPID dispidMember,REFIID riid, LCID lcid,   
  6.     WORD wFlags, DISPPARAMS * pDispParams,   
  7.     VARIANT * pvarResult,EXCEPINFO * pexcepinfo,   
  8.     UINT * puArgErr);  

其实,SetSite是IObjectWithSite接口的成员函数,然后呢,我们要将其记录下来,也就是IE浏览器的指针。然后再EyeOIE的cpp文件中写入如下代码

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. STDMETHODIMP CEyeOnIE::SetSite(IUnknown*pSite)  
  2. {  
  3.     m_spWebBrowser=pSite;  
  4.     if(m_spWebBrowser==NULL)  
  5.     {  
  6.         return E_INVALIDARG;  
  7.     }  
  8.     return Connecnt(true);  
  9. }  
  10. HRESULT CEyeOnIE::Connecnt(BOOL pB)  
  11. {  
  12.     CComPtr<IConnectionPoint>spPC;  
  13.     CComQIPtr<IConnectionPointContainer,&IID_IConnectionPointContainer>spCPC(m_spWebBrowser);  
  14.     HRESULT hr=spCPC->FindConnectionPoint(DIID_DWebBrowserEvents2,&spPC);  
  15.     if(FAILED(hr))  
  16.     {  
  17.         return hr;  
  18.     }  
  19.     if(pB)  
  20.     {  
  21.         hr=spPC->Advise(reinterpret_cast<IDispatch*>(this),&m_cookie);  
  22.     }  
  23.     else  
  24.     {  
  25.         hr=spPC->Unadvise(m_cookie);  
  26.     }  
  27.     return hr;  
  28. }  
  29. STDMETHODIMP CEyeOnIE::Invoke(DISPID dispidMember,REFIID riid, LCID lcid,   
  30.     WORD wFlags, DISPPARAMS * pDispParams,   
  31.     VARIANT * pvarResult,EXCEPINFO * pexcepinfo,   
  32.     UINT * puArgErr)  
  33. {   
  34.     USES_CONVERSION;  
  35.   
  36.     if (!pDispParams)  
  37.         return E_INVALIDARG;  
  38.   
  39.     switch (dispidMember)  
  40.     {  
  41.     case 250://DISPID_BEFORENAVIGATE2:  
  42.         break;  
  43.     case 252://DISPID_NAVIGATECOMPLETE2:  
  44.         break;  
  45.     case 259://DISPID_DOCUMENTCOMPLETE:  
  46.         ::MessageBoxA(NULL,"dada",0,0);  
  47.         break;  
  48.     default:  
  49.         break;  
  50.     }  
  51.     return S_OK;  
  52. }  

其实SetSite和Connect两个函数就是两个功能,一个是记录下IE浏览器的指针,然后呢就是,将浏览器指针强制类型转换,变成连接点管理器,然后,由得到的连接点管理器获得连接点,根据连接点,激活IE浏览器和BHO之间的通信,这样就完成了基本的操作,然后呢就是一些其他与BHO功能本身无关的代码了,但也是必须的

在dllmain.cpp文件中加入

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. if (dwReason == DLL_PROCESS_ATTACH)  
  2.     {  
  3.         TCHAR pszLoader[MAX_PATH];  
  4.         //返回调用者模块的名称,第一个参数应为NULL,详见msdn。  
  5.         GetModuleFileName(NULL, pszLoader, MAX_PATH);  
  6.         _tcslwr(pszLoader);  
  7.         if (_tcsstr(pszLoader, _T("explorer.exe")))  
  8.             return FALSE;  
  9.     }  

这样就避免了文件管理器加载该BHO插件,然后呢就是寻找EyeOnIE.rgs文件中加入一个注册表输出

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. HKLM  
  2. {  
  3. SOFTWARE  
  4. {  
  5. Microsoft   
  6. {  
  7. Windows  
  8. {  
  9. CurrentVersion  
  10. {  
  11. Explorer  
  12. {  
  13. 'Browser Helper Objects'  
  14. {  
  15. {<strong>851FBDE4-1953-4B58-AF94-5D072F1E9ED1</strong>}  
  16. }  
  17. }  
  18. }  
  19. }  
  20. }  
  21. }  
  22. }  

上面加粗的内容呢就是该BHO的CLSID,该CLSID的定义在BhoPlugin.idl文件中,



将该文件中的CLSID替换掉EyeOnIE.rgs文件中即可,这样BHO的创建就完成了!!!

PS:::::我在进行网页信息的获取时,有时会将网页中的内容就录下来,想放在txt文档中,但是呢,代码是正确的,就是不执行,经过一系列的文件查找,发现必须使用管理员权限运行IE浏览器,才能执行,对于遇到同样问题的童鞋,予以提醒

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
BHO(Browser Helper Object,浏览器辅助对象,简称BHO)   BHO是微软推出的作为浏览器对第三方程序员开放交互接口的业界标准,通过简单的代码就可以进入浏览器领域的“交互接口”(INTERACTIVED Interface)。通过这个接口,程序员可以编写代码获取浏览器的行为,比如“后退”、“前进”、“当前页面”等,利用BHO的交互特性,程序员还可以用代码控制浏览器行为,比如修改替换浏览器工具栏,添加自己的程序按钮等。这些在系统看来都是没有问题的。BHO原来的目的是为了更好的帮助程序员打造个性化浏览器,以及为程序提供更简洁的交互功能,现在很多IE个性化工具就是利用BHO的来实现。 编辑本段 技术优势   “浏览器劫持”是一种不同于普通病毒木马感染途径的网络攻击手段,而是使用各种技术(如DLL插件等)插件对用户的浏览器进行篡改。安装后,它们会成为浏览器的一部分,可以直接控制浏览器进行指定的操作,根据需要,可以让你打开指定的网站,甚至是收集你系统中的各种私密信息。最可怕的是只有当浏览器已经被劫持了,你才会发现,反应过来,原来电脑已经出现了问题。比如IE主页被改,开机就会弹出广告等等。目前,浏览器劫持已经成为Internet用户最大的威胁之一。其实“浏览器劫持”就是通过BHO的技术手段进入你的系统的,而这种技术是合法的。   从某种观点看,Internet Explorer同普通的Win32程序没有什么两样。借助于BHO,你可以写一个进程内COM对象,这个对象在每次启动时都要加载。这样的对象会在与浏览器相同的上下文中运行,并能对可用的窗口和模块执行任何行动。例如,一个BHO能够探测到典型的事件,如GoBack、GoForward、DocumentComplete等;另外BHO能够存取浏览器的菜单与工具栏并能做出修改,还能够产生新窗口来显示当前网页的一些额外信息,还能够安装钩子以监控一些消息和动作。 编辑本段 注册表位置   BHO在注册表中的位置是:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects,有兴趣的朋友可以在这里做做实验。不过一定要记住你更改的每一步,否则会出错的哦!   BHO对象依托于浏览器主窗口。实际上,这意味着一旦一个浏览器窗口产生,一个新的BHO对象实例就要生成。任何 BHO对象与浏览器实例的生命周期是一致的。其次, BHO仅存在于Internet Explorer 4.0及以后版本中。   如果你在使用Microsoft Windows? 98, Windows 2000, Windows 95, or Windows NT版本4.0 操作系统的话,也就一块运行了活动桌面外壳4.71,BHO也被 Windows资源管理器所支持。 BHO是一个COM进程内服务,注册于注册表中某一键下。在启动时,Internet Explorer查询那个键并把该键下的所有对象预以加载。   迅雷中TDAtOnce_Now.dll和xunleiBHO_Now.dll为安全   如何发现BHO里面的危险模块.   首先有一个能够查看进程的软件 冰刃就不错 下面以它为例:   先打开冰刃—会看到一个BHO在这里就可以看到危险BHO进程了

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值