IE是如何启动一个BHO对象的呢?
每次,当有新的IE实例启动时,IE浏览器都会去检查注册表中的项:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects
如果IE在注册表中找到了这些键,IE就会去寻找在这个键下面列出来的CLSID,如图所示
这些被列在Browser Helper Objects 下面的键告诉IE浏览器哪些BHO是需要被载入的。你可以通过编辑注册表手动为你的BHO创建一个CLSID的键,否则你需要为你的BHO创建一些实现注册功能的代码,来插入这些键值。
在Browser Helper Object键下面列出的每一个CLSID,IE都会在相同的进程空间比如浏览器中,调用CoCreateInstance 来启动一个新的BHO实例。换句话说,IE把BHO作为一个进程中的服务启动了。如果这个BHO已经注册了自己的CLSID并且实现了IObjectwithSite接口,那么这个被IE启动的BHO就把传递了一个指针给IE浏览器的IWebBrowser2接口。通过这个接口,BHO可以控制并收到来自IE浏览器的事件。
只要BHO被正确的创建了,那么每当新的IE的实例被启动的时候,他就会被IE加载。因此如果你安装了Microsoft Active Desktop,那么每次当你打开一个文件夹,一个子文件夹、或者一个浏览器窗口时,BHO都会被加载。如果你不再想要BHO被加载,你必须删除跟这个BHO相关联的注册表项。另外,你可以手动的编辑注册表项来删除它,也可以在你的BHO中写一些卸载的代码来为你做这些工作。