2014-11-21 67 views
0

我想写一个Internet Explorer 11的扩展名作为浏览器帮助对象在Visual C#中。我在Windows 7上使用Visual Studio 2013.在这里有Zilch的经验,我跑进了一堵砖墙,试图起飞。 我并不确定如何为BHO实现接口IObjectWithSite。我试过一些基本的东西让我开始,但它不工作......任何想法?Internet Explorer 11扩展(BHO)与C#

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注册,因为它已经在“设置”菜单中的“管理加载项”下显示。

希望通过这个BHO,我将尝试访问IE,然后希望操纵DOM。这对我来说是一种外在的方式(我习惯于Eclipse RCP,Linux),所以我希望有人能指引我朝着正确的方向发展!

干杯!

+2

请注意[在托管代码中写入BHO明确不支持](http://msdn.microsoft.com/en-us/library/windows/desktop/dd758089(v = vs.85).aspx)。 – 2014-11-22 08:37:50

+0

我的替代品是什么?你能推荐一个完整的微软平台新手的方向吗? – Boon 2014-11-22 11:47:02

+0

阅读文章进一步讨论。 C++是进程扩展中最常用的实现语言。 – 2014-11-22 15:06:22

回答

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

希望这会有所帮助。