使用C#的Internet Explorer 11扩展(BHO)

时间:2014-11-21 20:35:26

标签: c# windows internet-explorer bho

我正在尝试将Internet Explorer 11的扩展名编写为Visual C#中的浏览器帮助程序对象。我在Windows 7上使用Visual Studio 2013.凭借zilch在这里的经验,我跑进了一堵砖墙试图开始。    我不确定如何为BHO实现接口IObjectWithSite。我已经尝试了一些基本的东西让我开始,但它没有工作......任何想法?

using System;
using System.Runtime.InteropServices;
using SHDocVw;
using mshtml;
using System.Windows.Forms;

namespace IeAddOnDemo
{
    [ComVisible(true),
    Guid("9AB12757-BDAF-4F9A-8DE8-413C3615590C"),
    ClassInterface(ClassInterfaceType.None)]
    public class BHO : IObjectWithSite
    {
        public void SetSite(object site)
        {
            System.Diagnostics.Debug.WriteLine("hello");
        }

        public void GetSite(ref Guid guid, out IntPtr ppvSite)
        {
            System.Diagnostics.Debug.WriteLine("hello");
            ppvSite = new IntPtr();
        }
   }

}

我甚至无法写入控制台。当我已经注册它并且它出现在"管理附加组件"在“设置”菜单中。

希望有了这个BHO,我将尝试访问IE,然后希望操纵DOM。这是一种为我做事的外来方式(我已经习惯了Eclipse RCP,Linux)所以我希望有人可以指出我正确的方向!

干杯!

1 个答案:

答案 0 :(得分:0)

如果您在"管理加载项"的列表中看到BHO。页面然后它应该工作。操作System.Diagnostics.Debug.WriteLin可能不会起作用,因为BHO通常被限制访问浏览器本身旁边的所有内容。尝试另一种方法 - 尝试将下面的方法粘贴到方法GetSite / SetSite方法中。

MessageBox.Show("Bho is working");

之后如果显示消息框 - 它们被调用并且BHO工作。还试着看看在任务管理器中启动了什么IE进程,AFAIK BHO被分配了一个单独的进程。

关于DOM操作 - 尝试来自CodeProject的文章或其他SO答案的样本,例如:来自http://www.codeproject.com/Articles/149258/Inject-HTML-and-JavaScript-into-an-existing-page-w

希望这会有所帮助。