2010-05-12 83 views
1

我有一个IE BHO插件,我只想在用户从我的程序启动IE时启用(该程序使用CreateProcess()启动IE)。启用特定的BHO启用IE浏览器

我不希望在用户从我的程序外部启动IE时启用此BHO,因为这意味着BHO中的任何问题都可能会破坏用户的正常浏览体验。

这样做的最好方法是什么?

一种方法是注册BHO,启动IE,然后快速注销BHO。尽管这看起来有点乱,因为启动IE的程序崩溃可能导致BHO保持注册状态。

+0

有趣的是,如果BHO依赖于另一个不在路径中的DLL,IE将默默卸载BHO并默默继续。这是IE7,IE的其他版本可能会有不同的行为... – watsonmw 2010-05-12 16:41:25

回答

1

你的方法很容易出错,我建议不要这样做。相反,你的BHO应该总是加载IE,但默认情况下它不应该做任何事情。那么你需要的是告诉它“开始过滤”或“开始录制”或其他任何方式。

你有很多选择。最简单的是环境中的某个标志(一个信号量,一个磁盘文件)。您可以拥有一个特殊的网址,例如mybho:start

我已经做了这么多次,它的工作原理。

编辑是的,BHO将被加载到内存中,以及它依赖的任何DLL(尽管您只能在需要时通过LoadLibrary()加载它们)。

+0

就像等待一个标志/唯一的URL,但BHO仍然会被加载到内存以及BHO依赖的任何DLL。 – watsonmw 2010-05-12 00:51:18

+0

猜测我会重构BHO,以便尽可能延迟加载并限制加载时执行的静态初始化的数量。 – watsonmw 2010-05-12 16:36:05