IE插件BHO
一丶接口IObjectWithSite
//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);
}
}
二丶实现接口IObjectWithSite
using Microsoft.Win32;
using mshtml;
using SHDocVw; namespace TestBho
{
//每开启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;
List<string> logs = new List<string>();
public int SetSite(object site)
{
// ie进程创建,则创建BHO并ie进程以参数site传入,关闭ie进程将Null以参数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://192.168.1.1:8000/"))
{
logs.Add(URL.ToString());
logs.Add("-----------------------------------------");
logs.Add(ie.LocationURL); //ie地址栏的url
logs.Add(ie.LocationName); //ie标题或选项项标题
logs.Add(ie.Name); //ie应用的名称
logs.Add("-----------------------------------------");
}
} 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"); //当前类的GUID字符串(注意:不是接口GUID)
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"); //当前类的GUID字符串(注意:不是接口GUID) if (registryKey != null)
registryKey.DeleteSubKey(guid, false);
}
#endregion
}
三、安装与卸载BHO
Regasm.exe MyBHO.dll /codebase
//注册BHO,将安装到ie中,通过ie【管理加载项】管理BHO
Regasm.exe MyBHO.dll /unregister //卸载BHO
Regasm.exe /c MyBHO.dll //注册BHO,将安装到ie中,通过ie【管理加载项】管理BHO
Regasm.exe /u MyBHO.dll //卸载BHO
补充说明
//每开启IE浏览器器选项页都会创建一个Bho类的实例来对应IE选项页
//IE8 是每个Tab 一个独立进程,当IE的Tab进程被创建的时候,都会创建一个Bho类的实例
[ComVisible(true),Guid("BAD13015-0CE2-4220-9ADC-ED513C101155"),ClassInterface(ClassInterfaceType.None)]
public class BHO_ChangeHtml : IObjectWithSite
{
InternetExplorer ie;
Logs logs = new Logs();
public int SetSite(object site)
{
if (site != null)
{
ie = (InternetExplorer)site;
ie.DownloadComplete += new DWebBrowserEvents2_DownloadCompleteEventHandler(ie_DownloadComplete);
}
else
{
ie.DownloadComplete -= new DWebBrowserEvents2_DownloadCompleteEventHandler(ie_DownloadComplete);
}
return ;
} void ie_DownloadComplete()
{
if (ie.LocationURL.ToString().StartsWith("https://www.baidu.com"))
{
if((ie.Document as IHTMLDocument2) != null)
{
var html = (ie.Document as IHTMLDocument2).body.innerHTML.Replace("百度一下", "百度检索");
(ie.Document as IHTMLDocument2).body.innerHTML = html;
}
}
}
IE插件BHO的更多相关文章
- 【转】IE劫持原理 BHO
为什么"浏览器劫持"能够如此猖狂呢?放眼众多论坛的求助贴,我们不时可以看到诸如"我的IE被主页被改了,我用杀毒工具扫了一遍都没发现病毒,我把主页改回自己的地址,可是一重启 ...
- (转)IE劫持原理 BHO
为什么“浏览器劫持”能够如此猖狂呢?放眼众多论坛的求助贴,我们不时可以看到诸如“我的IE被主页被改了,我用杀毒工具扫了一遍都没发现病毒,我把主页改回自己的地址,可是一重启它又回来了!”.“我的系统一开 ...
- Socket.io在线聊天室
从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎.chrome浏 ...
- IE劫持
解析雅虎与百度流氓原理- 为什么“浏览器劫持”能够如此猖狂呢?放眼众多论坛的求助贴,我们不时可以看到诸如“我的IE被主页被改了,我用杀毒工具扫了一遍都没发现病毒,我把主页改回自己的地址,可是一重启它又 ...
- C# 开发BHO插件
BHO(Browser Helper Object)是插件,它寄存在IE浏览器中运行.在咱们的日常生活中无时无刻都在使用BHO,比如:迅雷检测用户是否单击了下载链接的BHO.用BHO也能做出些非常有意 ...
- C#开发BHO插件UrlTrack
最近忽然突发奇想,想统计一下我最经常上的网站是哪些,并且在这些网站上都停留了多久.为此决定写一个BHO插件来做这件事. BHO(Browser Help Objects)是实现了特定接口(IObjec ...
- C#为IE编写BHO插件心得
啥是BHO,其实大家都用过,没听过只是没在意而已,来张图你就知道是什么了 是不是很熟悉,就是这么个玩意~~ 先说说我要用来干嘛~我们有个库,里面数据很全面,但是某个部门需要在第三方的B/S系统录入某些 ...
- BHO插件操作IE浏览器,js调用C#方法
BHO是IE浏览器的扩展程序,全名Browser Helper Object,文件格式为DLL文件.可对IE浏览器的界面和访问内容进行修改操作.BHO只适用于IE浏览器,对其他任何浏览器都没有作用.( ...
- 如何使用BHO定制你的Internet Explorer浏览器
原文出处:Browser Helper Objects: The Browser the Way You Want It一.简介 有时,你可能需要一个定制版本的浏览器.在这种情况下,你可以自由地把一些 ...
随机推荐
- 在centos配置nginx+php的环境
环境版本:centos6.8/nginx1.10.2/php5.6.29 ====================安装nginx1.10.2==================== #根据centos ...
- 9.7 js进阶总结2
数组元素添加 将一个或多个新元素添加到数组结尾,并返回数组新长度 var week_len = week.push(‘星期四’,‘星期五’); 将一个或多个新元素添加到数组开始,数组中的元素自动后移, ...
- http://bbs.ednchina.com/BLOG_345002072_2001308.HTM
http://bbs.ednchina.com/BLOG_345002072_2001308.HTM
- mysql 数据库,表存储 大小
use information_schema; -- 查询一个数据库存储大小 select concat(round(sum(data_length/1024/1024),2),'MB') as da ...
- CSS z-index 属性
定义和用法 z-index 属性设置元素的堆叠顺序.拥有更高堆叠顺序的元素总是会处于堆叠顺序较低的元素的前面. 注释:元素可拥有负的 z-index 属性值. 注释:Z-index 仅能在定位元素上奏 ...
- 介绍开源的.net通信框架NetworkComms框架 源码分析
原文网址: http://www.cnblogs.com/csdev Networkcomms 是一款C# 语言编写的TCP/UDP通信框架 作者是英国人 以前是收费的 售价249英镑 我曾经花了 ...
- Android Studio新建一个HelloWorld 程序(App)
Android Studio新建一个HelloWorld程序(App) 新建 或者直接启动程序(注:如果已有程序,此方法会直接打开最近一次关闭从程序) 更改App名 选择App运行平台 选择模板 更改 ...
- 树莓派 config.txt
树莓派开机默认配置文件:/boot/config.txt # For more options and information see # http://www.raspberrypi.org/doc ...
- python初学day01
1.执行Python脚本时打印的字符有颜色 1. print "\033[32;1mhello\033[0m" #打印绿色 2. print "\033[31;1mhel ...
- 'autocomplete="off"'在Chrome 中不起作用
大家都知道autocomplete属性是表单字段中的HTML5新属性,该属性有两种状态值,分别为"on" 和 "off",该属性可省略:省略属性值后默认值为&q ...