红花还需绿叶衬插上翅膀的IE浏览器(4)

来源 :电脑爱好者 | 被引量 : 0次 | 上传用户:bob2cici
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  我们的日常生活已越来越离不开网络,上网自然离不开网络浏览器,而说到浏览器则又不得不涉及微软的Internet Explorer(以下简称IE),目前来说浏览器市场它依然是老大。相对应的,IE插件开发也就生财有道了,随意打开一个威客网站搜索“IE插件”,都可以找到许多相关的任务。所以,今天我们就来聊聊IE插件开发的话题。
  
  【芝麻开门】
  在开始之前,有必要对BHO这个概念有所了解。BHO是Browser Help Objects(浏览器助手对象)的简称,它实际就是实现了特定接口的COM组件。开发好的BHO插件在注册表特定的位置注册好后,每当IE启动,BHO实例就会被创建。在浏览器工作的过程中,BHO会接收到很多事件,比如浏览器浏览新的地址、前进或后退、生成新的窗口、浏览器退出等等。BHO可以在这些事件的响应中实现与浏览器的交互(见图1)。
  
  人物专访
  本期我们请到的,是2009年金山Office软件插件大赛金奖得主朱雄杰(小笨象)。他不仅擅长Office的插件开发,对IE插件开发也颇有研究。其实从这一点也可以看出,不同类型的插件开发实际也有很多共同的思路。
  CFan:为什么在Office之外,您还选择了IE这个平台?
  朱雄杰:网络相关开发,是程序员必然要关注到的一个发展方向。而网络开发则与浏览器有着千丝万缕的联系。如下图所示,是权威调研机构Net Applications公布的今年三月份浏览器的市场份额,可见IE占有绝对优势(含以IE为核心的其他第三方浏览器)。
  面对这种情况,任何一家依靠网络生存的公司都不敢忽略IE。所以,依靠IE,通过IE来扩展自己的知名度,提供服务,自然就成了这些公司的首要选择。就算是出品了Chrome浏览器的Google公司,他们也为IE专门制做了IE工具栏插件等来宣传自己,提供更多方便快捷的服务。而国内的网上银行,基本上都是以IE插件(ActiveX)的形式来进行交易处理的。
  CFan:IE插件开发的前景如何?
  朱雄杰:微软为IE开设了专门的插件网站:http://www.ieaddons.com/cn/。微软根椐不记实名的遥测数据显示,每位IE8用户平均拥有五六个已安装的插件,从这个数据可以略窥此市场需求。而根椐国内的统计数字显示,国内的插件联盟做得量大的月收入几十万很普遍,做得好的会员月收入几万是很轻松的。大树底下好乘凉,咱们做为软件开发人员,自然不能不上前乘凉的。
  
  【任务实战】
  首先确定我们今天的实战任务:鼠标手势。在基于IE的第三方浏览器中(如傲游等),都可以看到这个功能扩展,即用户按住鼠标右键不放,然后画一个相应的手势即可执行一定的功能,如前进、后退、刷新、关闭当前窗口、向下向上滚动等。但IE本身却反而没有这一功能(看来真是店大欺客啊)。因此,网络上也有人开发了相应的IE插件来实现这个功能,但是因为添加的其他功能太杂,导致IE不稳定,而我们只想要鼠标手势而已,干脆自己开发一个吧,就此还可以了解IE插件开发原理,为开发其他类型插件打好基础。
  浏览器助手对象是进程内的COM服务程序,那么还有什么比Active Template Library(ATL)更适合用来编写它呢?启动C++Builder,点击“新建”菜单,选择“ActiveX”项中的“ActiveX Library”,生成ActiveX工程(见图2)。并保存该工程为:IEME.cbproj(意为:IE鼠标增强)。
  然后再打开“新建”菜单,选择“ActiveX”项中的“Automation Object”并点击“OK”生成COM工程代码。
  接下来输入COM类的名称(本例为:IEMEX),点击“确定”,并保存为文件“IEMEXAddin.cpp”。
  工程建立之后需要注意一点,因为在Windows系统中,资源管理器与IE都是使用IE内核来展现内容的,所以我们需要判断一下调用者是谁。在“IEME.CPP”中的DLL入口函数中判断一下。
  int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
  {
  if (reason == DLL_PROCESS_ATTACH)
  {
  _Module.Init(ObjectMap, hinst);
   DisableThreadLibraryCalls(hinst);
  //判断是否是资源浏览器的调用。
   TCHAR pszLoader[MAX_PATH];
   GetModuleFileName(NULL, pszLoader, MAX_PATH);
   _tcslwr(pszLoader);
   if (_tcsstr(pszLoader, _T("explorer.exe")))
   return FALSE;
   }
  return TRUE;
  }
  同时,我们需要在这个插件DLL从IE中注册或者卸载时,自动添加相应的项值到注册表中,可添加InstallToIE()函数并添加到注册与卸载函数中。因为代码太长,这里仅就一些关键点做出说明,完整的代码包,可从http://work.newhua.com/cfan/201010/IEME.zip处下载,后面不再重复说明了。
  pif->RootKey=HKEY_LOCAL_MACHINE; //定义注册表根键
  pif->CreateKey("{88A03AD1-5ECA-4D8B-952D-400911740189}"); //创建注册表项
  pif->DeleteKey("{88A03AD1-5ECA-4D8B-952D-400911740189}"); //删除注册表项
  上面函数中的GUID值,可以从IEME.tlb中的Attributes中取得(见图3)。
  
  然后把关键的类文件“IEX_IdentifyGesture.cpp”添加到本工程中,并在“IEMEXAddin.h”中加入相应的语句。重复代码不再粘贴,以下仅列出增加或改变的代码:
  public IObjectWithSiteImpl, //我们添加的
  TIEMEXImpl(); //我们修改了
  ~TIEMEXImpl(); //我们添加的
  COM_INTERFACE_ENTRY(IObjectWithSite) //我们添加的
  COM_INTERFACE_ENTRY2(IDispatch, IIEMEX) //我们添加的
  STDMETHODIMP (SetSite) ( IUnknown* pUnkSite ); //我们添加的
  
  并在“IEMEXAddin.cpp”中实现相应的方法即可。注意,为了方便用户辩识我们的插件,最好加上DLL的版本信息。可以通过菜单“Project→Options”来设置工程的版本信息(见图4)。
  
  所有的代码工作完成,就需要注册到IE中了。单击“开始→运行”,输入“regsvr32 XXXX\IEME.dll”(不含外侧引号,XXXX是插件所在的目录),按回车键后就会提示注册成功。如果想卸载插件,则输入执行“regsvr32 /u XXXX\IEME.dll”命令即可。
  这时重新启动IE,按下鼠标右键,然后向下向右划线。怎么?IE自动关闭了!那就对了,哈哈,我们就是设置了向右下划线是关闭当前IE的。本文提供实例包,支持的手势如下:
  如果你使用的是IE8,可以通过IE8的“工具→管理加载项”来查看我们的插件是否安装启用了(见图5)。
其他文献
摘要:历史新教材注重培养学生运用史料分析问题、评价历史人物、评价历史事件的能力。教师如何使用新教材,推行新课程改革,完成教学任务,成为中学历史教师共同面对的问题。本文作者根据自己多年来初中历史教学实践,按照素质教育实施的要求,根据学生身心发展规律以及现行历史新教材的编排特点,谈谈对历史新教材使用的点滴体会。  关键词:历史新教材 课程改革 方法  现行历史新教材补充了大量的历史资料,并且在中考历史
期刊
摘要:本文在分析大学生心理咨询含义的基础上,介绍了大学生心理咨询的基本实施步骤,并指出咨询过程应遵循来访自愿原则、保密原则、价值中立原则、负责性原则、综合性原则等五大原则。  关键词:大学生;心理咨询;原则;  大学生是社会群体的重要组成部分,他们正处于身心发展的关键时期,随着生理心理的发育和成熟,社会阅历及思维方式的扩展和变化,他们将面临学习、生活、人际交往等多方面的心理困惑及社会压力,容易产生
期刊
摘要:科学的班会课能启迪学生智慧、增长学生综合素养、构建和谐班级,让新课改 “以人为本”“促进学生的终生发展”的教育理念在一线教育实践中得到有效的落实。  关键词:主题班会课;系列化;全面发展  一、开展主题班会课系列化研究的必要性  1.主题班会课的重要性  随着我国基础教育课程改革的推进和深化,德育工作受到了前所未有的重视。作为德育的主阵地---班会课,显得尤为重要。科学的班会课能启迪学生智慧
期刊
摘要:教育事业突飞猛进的发展,带动了图书馆的数字、网络建设,尤其是高校数字化图书馆的建设。在科技信息高速发展的今天,数字化图书馆在高等教育中扮演着越来越重要的角色。数字化图书馆的建设在很大程度上代表了高校特色教育的发展方向。  关键词:高校;数字化图书馆;建设  引言:  随着计算机技术的深入,网络技术的快速发展促进了人们获取信息的途径和方式。为了满足人们对信息的新的需求,数字化图书馆随之诞生。 
期刊
摘要:数学是我们在日常生活中应用比较多的一门学科,可是我们却割裂了数学和生活的关系,只是一味的进行枯燥的课堂教学,小学的数学学习最好要引入平时的生活情境。这样在数学学习上就感觉有了亲切感,学生就会更加用心的学习。本文对小学数学教学中如何运用生活情境进行简单探讨。  关键词:生活情境;开展;数学教学  数学其实是源于生活但是要高于生活。数学就是把数字、计算和儿童的现实生活联系到一起,让他们感觉到“数
期刊
摘要:面对目标众多的复杂战场形势,炮兵指挥员需要迅速对多目标的价值作出判断,提高决策效率。运用层次分析法对构成目标价值的各个要素进行分析,可以对目标的价值进行排序,为指挥员的决策提供参考依据。  关键词:层次分析法 炮兵 决策  现代战争中战场形势瞬息万变,目标种类复杂多样。炮兵要有效发挥陆军火力打击骨干力量的作用,有必要综合分析各种不同条件,建立目标价值量化分析系统,从而做到迅速、准确地判断目标
期刊
【摘 要】围涂工程和城乡建设工程中,做好政策处理工作,妥善安置好群众,是各级政府应该担负的责任。要做好政策处理工作,必须坚持以人为本,切实维护群众的根本利益,坚持全面、协调、可持续的原则,坚持统筹兼顾,着眼全局,才能达到和谐发展。  【关键词】思想政治;因素;影响    一、工程建设项目面临困难,使思想工作者面临许多困惑。  (一)征地价格偏低。以年产值乘倍数确定补偿标准,有不合理和不科学之处。当
期刊
摘要:2021年以来,国家教育部已经相继出台了关于手机、睡眠、作业、读物、体质等“五项管理”的重要教育文件以及相關部署。2021年5月20日,国家教育部正式召开全国中小学“五项管理”落实推进视频会议,进而确保“五项管理”相关教育工作能够落到实处、全面深入化延展与推进。鉴于此,作为一名初中校长、初中学校教育教学管理者和决策者,笔者在本文结合《福建省教育厅关于加强“五项管理”进一步推进中小学生减负工作
期刊
摘 要: 为实现高等应用型技术型人才的培养目标,高职电子类专业应大力推进实践教学改革。本文分析了高职院校电子类专业教学过程中存在的问题,对高职电子类专业如何进行实践教学改革进行分析和探讨并提出相应的建议与对策。  关键词: 高职;电子类专业;实践性教学;创新能力培养  高等职业教育的特点是以能力培养为主,使毕业生能在企业的生产和经营实际中担任技术方面的组织者和带头人。这种人才既要有一定的技术理论知
期刊
摘要:大学生犯罪是当今世界各国十分重视的社会问题,有人将大学生犯罪与环境污染、贩毒吸毒并列为世界三大公害。在我国,大学生犯罪同样是一个比较严重的社会问题。近年来,大学生犯罪问题十分突出,大学生犯罪率一直呈上升趋势,已经引起了全社会的重视。如何针对性地预防大学生犯罪,已是一个十分关键且棘手的问题。  关键词:大学生犯罪、特点原因  大学生是十分宝贵的人才资源,是构建和谐社会的主力军,是祖国的未来。然
期刊