码迷,mamicode.com
首页 > 其他好文 > 详细

IE插件BHO

时间:2016-08-14 22:04:10      阅读:103      评论:0      收藏:0      [点我收藏+]

标签:

//BHO项目(类库)添加引用两个COM
//Microsoft HTML Object Library, Microsoft Internet Controls;

using System.Runtime.InteropServices;

namespace TestBho
{
    [ComVisible(true), InterfaceType(ComInterfaceType.InterfaceIsIUnknown), Guid("FC4801A3-2BA9-11CF-A229-00AA003D7352")]
    public interface IObjectWithSite
    {
        [PreserveSig]
        int SetSite([MarshalAs(UnmanagedType.IUnknown)]object site);
        [PreserveSig]
        int GetSite(ref Guid guid, out IntPtr ppvSite);
    }
}

 

using Microsoft.Win32;
using mshtml;
using SHDocVw;

namespace TestBh
{
    //每开启IE浏览器器选项页都会创建一个MyBho类的实例来对应IE选项页
    //IE8 是每个Tab 一个独立进程,当IE的Tab进程被创建的时候,都会创建一个MyBho类的实例
    [ComVisible(true),Guid("8a194578-81ea-4850-9911-13ba2d71efbd"),ClassInterface(ClassInterfaceType.None)]
    public class MyBHO : IObjectWithSite
    {
        InternetExplorer ie;
        FrmBho frm;
        Logs logs = new Logs();
        public int SetSite(object site)
        {
            if (site != null)
            {
                ie = (InternetExplorer)site;
                logs.Add("BHO构建");
                ie.DocumentComplete += new DWebBrowserEvents2_DocumentCompleteEventHandler(ie_DocumentComplete);
            }
            else
            {
                ie.DocumentComplete -= new DWebBrowserEvents2_DocumentCompleteEventHandler(ie_DocumentComplete);
            }
            return 0;
        }

        private void ie_DocumentComplete(object pDisp, ref object URL)
        {
            if (URL.ToString().StartsWith("http://116.252.254.204:8001/"))
            {
                logs.Add(URL.ToString());
                logs.Add("-----------------------------------------");
                logs.Add(ie.LocationURL);
                logs.Add(ie.LocationName);
                logs.Add(ie.Name);
                logs.Add("-----------------------------------------");
                if(frm==null) frm = new FrmBho(logs);
                frm.Show();
                frm.ShowText();
            }
        }

        public int GetSite(ref Guid guid, out IntPtr ppvSite)
        {
            IntPtr punk = Marshal.GetIUnknownForObject(ie);
            int hr = Marshal.QueryInterface(punk, ref guid, out ppvSite);
            Marshal.Release(punk);
            return hr;
        }

        #region 注册Bho
        public static string key = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Browser Helper Objects";
        [ComRegisterFunction]
        public static void RegisterBHO(Type type)
        {
            RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(key, true);

            if (registryKey == null)
                registryKey = Registry.LocalMachine.CreateSubKey(key);

            string guid = type.GUID.ToString("B");
            RegistryKey ourKey = registryKey.OpenSubKey(guid);

            if (ourKey == null)
                ourKey = registryKey.CreateSubKey(guid);

            registryKey.Close();
            ourKey.Close();
        }

        [ComUnregisterFunction]
        public static void UnregisterBHO(Type type)
        {
            RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(key, true);
            string guid = type.GUID.ToString("B");

            if (registryKey != null)
                registryKey.DeleteSubKey(guid, false);
        }
        #endregion
    } 

 

IE插件BHO

标签:

原文地址:http://www.cnblogs.com/cztaxlyh/p/5771135.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!