文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | 免费看大片 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院程序开发数据结构使用BHO定制你的IE浏览器
精品推荐
特别推荐
·网游外挂编写完全攻略
·开发WDM型的USB设备驱动程序
·数据库设计范式深入浅出
·理解软件保护技术之序列号方式
·大型网站必鉴:分销渠道的结构
·你的代码真的很健壮吗
·利用HOOK拦截封包原理
·四种网络游戏外挂的设计方法
·程序语言效率比较
·五子棋算法
热点TOP10
·剖析备份个人数据十大注意事项
·BPEL的基本活动介绍
·BPEL模型基础
·VS2005视频教程之站点地图[视频]
·DB2数据库部分日常实用操作
·数据结构教程 第十五课 串的表示和实现
·MD5算法解释
·逆向思维 《魔兽世界》封包分析
·IE工具条插件Toolbar开发简介
·网游外挂编写完全攻略

使用BHO定制你的IE浏览器

日期:2008年6月8日 作者: 查看:[大字体 中字体 小字体]




class ATL_NO_VTABLE CViewSource :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CViewSource, &CLSID_ViewSource>,
public IObjectWithSiteImpl<CViewSource>,
public IDispatchImpl<IViewSource, &IID_IViewSource,
&LIBID_HTMLEDITLib>

  正如你所见,向导已经使类从接口IObjectWithSiteImpl继承,这是一个ATL模板类,它提供了接口IObjectWithSite的基本实现。一般情况下,没有必要重载成员函数GetSite()。取而代之的是, SetSite() 实现代码经常需要加以定制。ATL实际上仅仅把一个IUnknown接口指针存储在成员变量m_spUnkSite中。

  在文章的剩余部分,我将讨论一个 BHO 的相当复杂而丰富的例子。该BHO对象将依附于Internet Explorer,并显示一个文本框来显示当前正浏览的网页源码。 该代码窗口将 随着你改变网页而自动更新,如果浏览器显示的不是一个HTML网页时,它将变灰。你对于原始HTML代码的任何改动立即反映在浏览器中。HTML (DHTML)使得这一看似魔术般的实现成为可能。该代码窗口可被隐藏和通过按动热键重现。 在可见情况下,它与Internet Explorer共享整个桌面空间,见图三。

使用BHO定制你的IE浏览器(图三)
点击查看大图

图三 BHO对象在使用中。它依附于Internet Explorer,并显示一个窗口来显示当前正浏览的网页源码。还允许你源码进行修改。

  本例子的关键点在于存取Internet Explorer的浏览机制,其实它只不过是WebBrowser控件的一个实例而已。这个例子可以分解为以下五步来实现:

  探测谁在装入这个对象,是Internet Explorer还是Windows资源管理器;

  获取接口IWebBrowser2以实现Web浏览器对象;

  捕捉Web浏览器的特定事件;

  存取当前文档对象,确定它是一份HTML类型的文件;

  管理对话框窗口以实现HTML源码的显示;

  第一个步骤是在DllMain()中完成的。SetSite()是取得指向WebBrowser对象指针的适当位置。请详细分析以下步骤。
  七、探测谁在调用这个对象

  如前所述,一个BHO对象会被Internet Explorer或者Windows资源管理器(前提:外壳版本4.71或者更高)所加载。所以我专门设计了一个BHO来处理HTML网页,因此这个BHO与资源管理器毫无关系。如果一个Dll不想被调用者一起加载,只需在DllMain()中实现了探明谁在调用该对象后返回FALSE即可。参看下面代码:


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;
}

  一旦知道了当前进程是Windows资源管理器,可立即退出。

  注意,再多加一些条件语句是危险的!事实上,另外一些进程试图装入该DLL时将被放弃。如果你做另外一个试验,比方说针对Internet Explorer的执行文件iexplorer.exe,这时第一个受害者就是regsvr32.exe(该程序用于自动注册对象)。

if (!_tcsstr(pszLoader, _T("iexplore.exe")))

  你不能够再次注册该DLL库了。 事实上,当 regsvr32.exe 试图装入DLL以激活函数DllRegisterServer()时,该调用将被放弃。

  八、与Web浏览器取得联系


  SetSite()方法正是BHO对象被初始化的地方,此外,在这个方法中你可以执行所有的仅仅允许发生一次的任务。当你用Internet Explorer打开一个URL时,你应该等待一系列的事件以确保要求的文档已完全下载并被初始化。唯有在此时,你才可以通过对象模型暴露的接口(如果存在的话)存取文档内容。这就是说你要取得一系列的指针。第一个就是指向IWebBrowser2(该接口用来生成WebBrowser对象)的指针。第二个指针与事件有关。该模块必须作为一个浏览器的事件侦听器来实现,目的是为接收下载以及与文档相关的事件。下面用ATL灵敏指针加以封装:

上一页 [1] [2] [3] [4] [5] [6] [7] [8] 下一页 




上一篇:软件设计本质论—白话面向对象

下一篇:电骡协议规范之客户端到客户端TCP连接

相关文章:
·为什么iexplore.exe在打开网页时CPU使用会100%?
·几秒钟让你的电脑百毒不侵,提速百倍!
·溯雪使用说明
·键盘的使用与指法训练
·震撼你的视觉 3D星空高清晰壁纸欣赏
·Firefox 使用常见问题和解决方法
·GHOST使用方法(图解)
·注册表应用100例—注册表使用全攻略之十一
·Vista系统使用技巧总结
·教您如何使用无线上网全攻略
相关软件:
·用Photoshop美化你的相片
·黑客视频教程 VMware虚拟机的安装和使用
·黑客视频教程-灰鸽子远控使用教程
·使用GPMC随心所欲管理组策略
·Adobe Photoshop CS 2 简体中文使用指南
·唤醒你的创业精神
·数码相机购买使用宝典 V1.03.29
·速达浏览器V3.9 绿色版
·FLASH 8中文使用手册
·Showyou网络浏览器Build E

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.vipcn.net
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.vipcn.net All Rights Reserved. 鄂ICP备05000083号Powered by:viphot