怎样写一个与Windows10 IE11兼容的标准BHO?
环境:Windows10 x64(10240) IE11(x86环境类似)
作者:magictong
日期:2015/11/11
概述
其实Windows8刚出来的时候写过一篇关于BHO怎么与Win8 x86下IE11(增强保护模式开启)兼容的文章(传送门:http://blog.youkuaiyun.com/magictong/article/details/21280243),本文主要讨论的问题是Windows10 x86 &x64(是的x64也包含了)下BHO与IE11(增强保护模式开启)兼容的问题。
其方法和思路跟Windows8下是类似的,但是修改了一些实现方法,修复了之前那篇文章里面的bug,并且针对x64做了一些必要的处理,本文后面说到的系统和一些贴图都是来之于Windows10x64的10240版本(不再赘述)。
现象
看到这篇文章的人,上面这个图应该见过吧,网上很多的文章对于这个问题的解决方法是将IE的增强安全功能关掉,以解决此不兼容问题。当然对于第三方的插件来说,譬如网购插件,支付插件,这可能是唯一的方法,但是作为一个开发者,我们应该更多的思考怎么从技术上解决此问题,微软既然有此提示,说明也是有方法解决的。
第一步:兼容x64系统
其实如果是优先兼容x86系统,兼容x64系统是可以放到最后讲的,但是因为我们以x64系统为例讲,而且兼容x64系统的操作很简单,因此提到最前面说了。
其实秘密就是你要准备两个BHO组件(别问我是怎么知道的,反正就是这样o(∩_∩)o ),一个是x86下使用的(32位模块),一个是x64下使用的(64位模块),二者使用的CLSID,IID,LIBID都要完全一样,简单点处理就是可以把原始代码分x86平台和x64平台编译出两个模块来,然后分别注册,不用担心CLSID会冲突,在x64系统下,32位的COM组件的注册表在HKEY_CLASSES_ROOT\Wow6432Node\CLSID下面,x64位COM组件注册表才在HKEY_CLASSES_ROOT \CLSID下。
另外需要说明的是,如果你的IE没有开增强保护模式,那么你可以根据需要只准备一个BHO模块,也就没有本文说得要解决的这些问题了。</