【问题标题】:How to determine when IE (Internet Explorer) browser is opened in my BHO?如何确定何时在我的 BHO 中打开 IE (Internet Explorer) 浏览器?
【发布时间】:2012-05-16 13:51:36
【问题描述】:

我为 IE 编写了一个插件:当 IE 打开时,我的插件会自动显示一个对话框来与用户交互。但是我无法确定打开 IE 时将调用哪个函数(我将实现)。你能帮帮我吗?

非常感谢!

我已经编写了这样的插件:http://www.codeproject.com/Articles/37044/Writing-a-BHO-in-Plain-C。但它仅在用户单击 IE 齿轮上的项目时运行。我想在 IE 打开时运行这个插件。

谢谢

【问题讨论】:

    标签: internet-explorer plugins com atl bho


    【解决方案1】:

    IE 将调用您的 IObjectWithSite::SetSite() 实现。这是您与浏览器的第一次交互。

    注意:此时您可能无法显示对话框。 IE 的启动过程复杂且高度异步。如果您尝试过早显示对话框,您可能会挂起。如果是这种情况,您应该将异步消息发回给自己,以便稍后显示对话框。或者,您可以接收DWebBrowserEvents2::DocumentComplete 并在第一页加载完成时显示您的对话框。

    【讨论】:

    • 谢谢。我已经实现了 SetSite。但是我的 BHO 仅在用户单击 IE 设备上的 BHO 项目时运行。我希望我的 BHO 在 IE 运行时运行(可能晚了),它不需要用户点击 IE 的齿轮。
    • 我的 BHO 无法接收任何未创建的事件。我看到了,我的 BHO 是在用户第一次点击它的齿轮项目时创建的(创建 BHO 并调用 SetSite)并在其他时间调用 Exc。
    • 您是否在注册表中正确注册了您的 BHO?它应该在进程加载时自动创建。如果在单击按钮之前没有创建您,这意味着您仅注册为工具栏按钮扩展,这与 BHO 不同。如果你的包有一个 BHO 和一个工具栏按钮扩展,你应该有两个不同的 IObjectWithSite 实现。
    • 谢谢。我只是这么认为。那么,如何正确注册我的 BHO?我正在尝试使用谷歌。
    【解决方案2】:

    我找到了我的解决方案。这个教程救了我的命:http://www.codeproject.com/Articles/37044/Writing-a-BHO-in-Plain-C.

    只写一个普通的 BHO。然后安装它。 安装 BHO 只需要一个进程调用我们 BHO 的 DllRegisterServer 函数。这通过 regsvr32.exe 实用程序变得简单。只需运行命令 regsvr32.exe ,BHO 就会被注册。要卸载 BHO,进程需要调用 BHO 的 DllUnregisterServer 函数。这也可以通过 regsvr32.exe 通过运行命令 regsvr32.exe /u 来完成。

    【讨论】:

      猜你喜欢
      • 2014-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-26
      • 1970-01-01
      • 2017-03-07
      • 2010-09-09
      • 2020-02-15
      相关资源
      最近更新 更多