IE插件BHO

//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
    }
时间: 2024-10-19 01:07:02

IE插件BHO的相关文章

Socket.io在线聊天室

从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎.chrome浏览器就基于V8,同时打开20-30个网页都很流畅.Nodejs标准的web开发框架Express,可以帮助我们迅速建立web站点,比起PHP的开发效率更高,而且学习曲线更低.非常适合小型网站,个性化网站,我们自己的Geek网站!! 关于作者 张丹(Conan), 程序员Java,R,PHP,Java

Internet Explorer研究1-5章节

一.About Browser Extensions关于浏览器扩展 Browser extensions allow developers to provide easy access to their browser enhancements by adding elements (like an Explorer Bar) to the default user interface. This enables developers to create Explorer Bars and ad

C#开发BHO插件UrlTrack

最近忽然突发奇想,想统计一下我最经常上的网站是哪些,并且在这些网站上都停留了多久.为此决定写一个BHO插件来做这件事. BHO(Browser Help Objects)是实现了特定接口(IObjectWithSite)的COM组件.开发好的BHO插件除了要在注册表中注册为COM Server外,还必须将它的CLSID在HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects下注册为子键.每当浏览

C# 开发BHO插件

BHO(Browser Helper Object)是插件,它寄存在IE浏览器中运行.在咱们的日常生活中无时无刻都在使用BHO,比如:迅雷检测用户是否单击了下载链接的BHO.用BHO也能做出些非常有意思的程序:窃取用户在网页上输入的密码信息等. 接下来,咱们也来制作一个恶搞的BHO吧,该BHO的功能如下: 1.注册成功后,每当用户浏览一个新的网页时,会自动在该网页中注入一个按钮 2.点击该按钮能获取用户在该网页中输入的敏感信息 操作步骤 图1 图2 图3 图4 图5 图6 图7 程序代码 IOb

C#为IE编写BHO插件心得

啥是BHO,其实大家都用过,没听过只是没在意而已,来张图你就知道是什么了 是不是很熟悉,就是这么个玩意~~ 先说说我要用来干嘛~我们有个库,里面数据很全面,但是某个部门需要在第三方的B/S系统录入某些信息,表单数据较大,可能这些数据我的库里面有,在不改动第三方系统的前提下,把我库中的匹配数据填充到第三方系统表单中去! 可能首先想到的解决方式就是:搞个浏览器嘛,winform或者webkit都行,但是你得考虑到第三方系统如果使用了各自厂商的activeX怎么办... 其次,自己写个activeX嘛

利用BHO实现浏览器劫持

1.简介 BHO 全名: Browser Helper Object 即浏览器辅助对象 它是微软推出的作为浏览器对第3方程序开发的交互接口的标准. 通过这个接口就可以编写代码来拓展浏览器, 获取浏览器行为等. 因此同样给了恶意代码的可乘之机. 恶意代码可以通过注册插件等手段来对浏览器进行劫持. 借助BHO,可以写一个进程内的COM对象,这个对象在每次启动时都加载. BHO对象依托于浏览器主窗口, BHO对象与浏览器实例生命周期是一致的 此外, BHO是个COM进程内服务, 注册于注册表某一键下.

如何使用BHO定制你的Internet Explorer浏览器

一.简介 有时,你可能需要一个定制版本的浏览器.在这种情况下,你可以自由地把一些新颖但又不标准的特征增加到一个浏览器上.结果,你最终有的只是一个新但不标准的浏览器.Web浏览器控件只是浏览器的分析引擎.这意味着仍然存在若干的与用户接口相关的工作等待你做――增加一个地址栏,工具栏,历史记录,状态栏,频道栏和收藏夹等.如此,要产生一个定制的浏览器,你可以进行两种类型的编程――一种象微软把Web浏览器控件转变成一个功能齐全的浏览器如Internet Explorer:一种是在现有的基础上加一些新的功能

定制IE浏览器的尖兵利器 - BHO

IE浏览器是当前使用人数最广的浏览器, 本文主要来讲述如何来打造我们自己特色的浏览器, 自定义工具栏按钮, 自定义网页的右击菜单, BHO技术与IE浏览器. 本文写作过程中参考不少网络上的相关资料, 我将在最后的参考资料中列出这些文章. 自定义工具栏按钮 我们经常看到迅雷, 网际快车(FlashGet)等软件安装后会向IE的工具条添加自己的按钮.按下按钮后还会作出相应的动作,这种功能是如何实现的呢? 基本原理:从IE5开始便允许我们向工具栏添加自己的按钮,其本质就是修改注册表,添加创建此按钮所需

插件知识总结

1.什么是插件? 插件是一种遵循一定规范的应用程序接口编写出来的程序.很多软件都有插件,插件有无数种. 插件是指会随着IE浏览器的启动自动执行的程序. 例如在IE中,安装相关的插件后,WEB浏览器能够直接调用插件程序,用于处理特定类型的文件.2.为什么要使用? 可以可以处理一些特定类型的文件, 3.插件会从什么位置加载到IE浏览器中? 根据插件在浏览器中的加载位置,可以分为工具条(Toolbar).浏览器辅助(BHO).搜索挂接(URL SEARCHHOOK).下载ActiveX(ACTIVEX