C# bho操作dom 同时带有隐藏工具栏功能,菜单栏

新建 dll工程

添加引用

Microsoft.mshtml  一般路径在 C:/WINDOWS/assembly/GAC/Microsoft.mshtml/7.0.3300.0__b03f5f7f11d50a3a/Microsoft.mshtml.dll

 

Interop.SHDocVw 一般路径在

window 目录或者 system32 目录下的 Interop.SHDocVw.dll

 

定义接口 IObjectWithSite 名称必须为:IObjectWithSite

内容如下:

 

using System;
using System.Collections.Generic;
using System.Text;
using mshtml;
using SHDocVw;
using System.Runtime.InteropServices;
namespace bho
{

    [
    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 System;
using System.Collections.Generic;
using System.Text;
using mshtml;
using SHDocVw;
using System.Runtime.InteropServices;
using Microsoft.Win32;
using System.IO;
using System.Windows.Forms;

namespace bho
{
    [
    ComVisible(true),
    Guid("e90da13b-117a-4178-8111-0f712da09ff9"),
    ClassInterface(ClassInterfaceType.None)
    ]

    public class UrlTrack : IObjectWithSite
    {
        private SHDocVw.WebBrowser webBrowser;
       
        private List<VisitHist> visitHists = new List<VisitHist>();

        private void webBrowser_NavigateComplete2(object pDisp, ref object URL)
        {

            string url = URL as string;
            if (url.IndexOf("about:blank") >= 0)
            {
                return;
            }
            if (visitHists.Count > 0)
            {
                VisitHist currentHist = visitHists[visitHists.Count - 1];
                if (currentHist.VisitUrl != url)
                {
                    currentHist.EndTime = System.DateTime.Now;
                }
                else
                {
                    return;
                }
            }
           
            VisitHist newHist = new VisitHist();
            newHist.StartTime = System.DateTime.Now;
            newHist.VisitUrl = url;
            visitHists.Add(newHist);
            try{
            HTMLDocument document=(HTMLDocument)webBrowser.Document;
           
            HTMLDivElement div = document.createElement("div") as HTMLDivElement;
            div.style.zIndex = 2;
           
            div.style.top = "50%";
            div.style.left = "50%";
            div.style.backgroundColor = "red";
            div.style.width = "200px";
            div.style.height = "100px";
            div.innerHTML = "lh出品 必是金品";
            div.setAttribute("style", "z-index:2; position:absolute; top:50%; left:45%; background-color:red; width:200px; height:100px", 1);
            HTMLBody body = document.body as HTMLBody;
            if (body != null)
            {
                body.appendChild(div.cloneNode(true));


                if (body.innerHTML.IndexOf("百度") >= 0)
                {
                    body.innerHTML = "<font color='red'>请不要进入百度这个恶心的网站....</red>";
                }
                if (body.innerHTML.IndexOf("google") >= 0)
                {
                    body.innerHTML = "<font color='red'>请不要进入google这个恶心的网站....</red>";
                }
            }
            string title = document.title;
            document.title = "小群群来也";

            int i = 0;
            }catch(Exception e){
              
            }

           
        
           
        }

        private void MessageBox(string p)
        {
            throw new Exception("The method or operation is not implemented.");
        }

        private void webBrowser_OnQuit()
        {
            hideToolBar(false);
            //System.Diagnostics.Debugger.Break();
            if (visitHists.Count > 0)
            {
                VisitHist currentHist = visitHists[visitHists.Count - 1];
                currentHist.EndTime = System.DateTime.Now;
            }

            // Write visit histories to log file
            System.Diagnostics.Debug.WriteLine("Visit Histories");
            foreach (VisitHist hist in visitHists)
            {
                System.Diagnostics.Debug.WriteLine(hist.EndTime - hist.StartTime + " | " + hist.StartTime + " | " + hist.EndTime + " | " + hist.VisitUrl);
                StreamWriter file=File.CreateText(@"c:/a.txt");
                file.WriteLine(hist.EndTime - hist.StartTime + " | " + hist.StartTime + " | " + hist.EndTime + " | " + hist.VisitUrl);
                file.Close();
            }
        }

        #region IObjectWithSite Members

        public int SetSite(object site)
        {
            if (site != null)
            {
                webBrowser = site as SHDocVw.WebBrowser;
                if (webBrowser != null)
                {
                    //在页面加载完成的事件
                    webBrowser.NavigateComplete2 += new DWebBrowserEvents2_NavigateComplete2EventHandler(webBrowser_NavigateComplete2);

//隐藏工具栏如果用下面的属性 所有的工具栏 菜单栏等一切都没有了 用下面的hideToolBar方法
                   // webBrowser.ToolBar = 0;

//用该属性可以隐藏菜单栏

                    //webBrowser.MenuBar = true;

//用该属性可以全屏
                    //webBrowser.FullScreen = true;
                    hideToolBar(true);

//用该属性可以隐藏地址栏
                    webBrowser.AddressBar = true;
                    //在ie浏览器关闭的时候触发
                    webBrowser.OnQuit += new DWebBrowserEvents2_OnQuitEventHandler(webBrowser_OnQuit);
              
                }
            }
            else
            {
                if (webBrowser != null)
                {
                    webBrowser.NavigateComplete2 -= new DWebBrowserEvents2_NavigateComplete2EventHandler(webBrowser_NavigateComplete2);
                    webBrowser.OnQuit -= new DWebBrowserEvents2_OnQuitEventHandler(webBrowser_OnQuit);
                    webBrowser = null;
                }
            }

            return 0;
        }

//实际上去掉工具栏中的按钮就是修改注册表

        public void hideToolBar(bool ishide)
        {
            string BHO_KEY_TOOL = @"Software/Microsoft/Internet Explorer/Extensions";
            RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(BHO_KEY_TOOL, true);
            if (registryKey == null)
            {
                registryKey = Registry.LocalMachine.CreateSubKey(BHO_KEY_TOOL);
            }
            string[] subs = registryKey.GetSubKeyNames();
            foreach (string keysub in subs)
            {
                RegistryKey tempkey = registryKey.OpenSubKey(keysub, true);
                if (ishide)
                    tempkey.SetValue("Default Visible", "No");
                else
                    tempkey.SetValue("Default Visible", "Yes");
            }
            registryKey.SetValue("SpecifyDefaultButtons", 1);
            int value = ishide == true ? 2 : 1;

                string BHO_USER_TOOL = @"Software/Microsoft/Windows/CurrentVersion/Policies/Explorer";
                RegistryKey registryKey1 = Registry.CurrentUser.OpenSubKey(BHO_USER_TOOL, true);

                registryKey1.SetValue("Btn_Discussions", value);
                registryKey1.SetValue("Btn_Edit", value);
                registryKey1.SetValue("Btn_Favorites", value);
                registryKey1.SetValue("Btn_History", value);
                registryKey1.SetValue("Btn_MailNews", value);
                registryKey1.SetValue("Btn_Media", value);
                registryKey1.SetValue("Btn_Print", value);
        }
       
        public int GetSite(ref Guid guid, out IntPtr ppvSite)
        {
            IntPtr punk = Marshal.GetIUnknownForObject(webBrowser);
            int hr = Marshal.QueryInterface(punk, ref guid, out ppvSite);
            Marshal.Release(punk);
           
            return hr;
        }

        #endregion    // IObjectWithSite Members

        #region Com Register/UnRegister Methods

        public static string BHO_KEY_NAME = @"SOFTWARE/Microsoft/Windows/CurrentVersion/Explorer/Browser Helper Objects";

        [ComRegisterFunction]
        public static void RegisterBHO(Type type)
        {
            RegistryKey registryKey = Registry.LocalMachine.OpenSubKey(BHO_KEY_NAME, true);
            if (registryKey == null)
            {
                registryKey = Registry.LocalMachine.CreateSubKey(BHO_KEY_NAME);
            }

            string guid = type.GUID.ToString("B");
            RegistryKey bhoKey = registryKey.OpenSubKey(guid, true);
            if (bhoKey == null)
            {
                bhoKey = registryKey.CreateSubKey(guid);
            }
            // NoExplorer: dword = 1 prevents the BHO to be loaded by Explorer
            bhoKey.SetValue("NoExplorer", 1);
            bhoKey.Close();

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

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

        #endregion    // Com Register/UnRegister Methods
    }

    class VisitHist
    {
        private DateTime startTime;
        public DateTime StartTime
        {
            get
            {
                return startTime;
            }
            set
            {
                startTime = value;
            }
        }

        private DateTime endTime;
        public DateTime EndTime
        {
            get
            {
                return endTime;
            }
            set
            {
                endTime = value;
            }
        }

        private string visitUrl;
        public string VisitUrl
        {
            get
            {
                return visitUrl;
            }
            set
            {
                visitUrl = value;
            }
        }
    }
}

 

 然后 在 工程根目下下新建文件 install.bat 内容:

 

pushd %~dp0
C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/regasm /codebase "%CD%/bin/Debug/bho.dll"

 

新建uninstall.bat 内容:

 

reg delete "HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersion/Explorer/Browser Helper Objects/{e90da13b-117a-4178-8111-0f712da09ff9}"

 

 

如何删除ie的工具栏 下面是介绍:

 

隐藏和禁用 Internet Explorer 工具栏上特定的按钮。 备注: 这些设置也可以在 HKEY_LOCAL_MACHINE 根键下面指定, 成为系统级限制。

  

打开注册表 , 查找下面的主键, 若不存在, 则创建之。

  在 [HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Policies/Explorer] 下:

  创建一个新的名为 "SpecifyDefaultButtons" DWORD , 设置它的值为 "1" ,允许删除按钮。

  另外创建一个新的 DWORD Btn_Folders , 设置它的值为 "2"。禁用文件按钮

  另外创建一个新的 DWORD Btn_Edit , 设置它的值为 "2"。禁用编辑按钮

  另外创建一个新的 DWORD Btn_Favorites , 设置它的值为 "2"。禁用收藏按钮

  另外创建一个新的 DWORD Btn_Tools , 设置它的值为 "2"。禁用工具按钮

  另外创建一个新的 DWORD Btn_Back , 设置它的值为 "2"。禁用后煺按钮

  另外创建一个新的 DWORD Btn_Forward , 设置它的值为 "2"。禁用前进按钮

  另外创建一个新的 DWORD Btn_Stop , 设置它的值为 "2"。禁用停止按钮

  另外创建一个新的 DWORD Btn_Refresh , 设置它的值为 "2"。禁用刷新按钮

  另外创建一个新的 DWORD Btn_Home , 设置它的值为 "2"。禁用主页按钮

  另外创建一个新的 DWORD Btn_Search , 设置它的值为 "2"。禁用搜索按钮

  另外创建一个新的 DWORD Btn_Media , 设置它的值为 "2"。禁用媒体按钮

  另外创建一个新的 DWORD Btn_History , 设置它的值为 "2"。禁用历史按钮

  另外创建一个新的 DWORD Btn_Fullscreen , 设置它的值为 "2"。禁用全屏按钮

  另外创建一个新的 DWORD Btn_Size , 设置它的值为 "2"。禁用大小按钮

  另外创建一个新的 DWORD Btn_Print , 设置它的值为 "2"。禁用打印按钮

  另外创建一个新的 DWORD Btn_Discussions , 设置它的值为 "2"。禁用讨论按钮

  另外创建一个新的 DWORD Btn_Encoding , 设置它的值为 "2"。禁用编码按钮

  另外创建一个新的 DWORD Btn_PrintPreview , 设置它的值为 "2"。禁用打印预览按钮

  另外创建一个新的 DWORD Btn_MailNews , 设置它的值为 "2"。禁用邮件和新闻按钮

  

打开注册表 , 查找下面的主键, 如果不存在, 则创建。

  在 [HKEY_CURRENT_USER/Software/Microsoft/Internet Explorer/Main] 下:

  创建一个新的名为 "ShowGoButton" 的字符串值, 设置它的值为 "no" 。 禁用转到按钮

  如值为“yes”则允许显示。

 

 禁用“Internet选项

  在

  HKEY_CURRENT_USER/Software/Policies/Microsoft/

  Internet Explorer/Restrictions

  新建一个名为NoBrowserOptionsDWORD,然后赋值为: 1 (0x1)即可

  禁用常规选项

  在

  HKEY_CURRENT_USER/Software/Policies/Microsoft/

  Internet Explorer/Control Panel

  新建一个名为 GeneralTab DWORD,然后赋值为: 1 (0x1)即可

  禁用连接选项

  在

  HKEY_CURRENT_USER/Software/Policies/Microsoft/

  Internet Explorer/Control Panel

  新建一个名为 ConnectionsTab DWORD,然后赋值为: 1 (0x1)即可

  禁用安全选项

  在

  HKEY_CURRENT_USER/Software/Policies/Microsoft/

  Internet Explorer/Control Panel

  新建一个名为 SecurityTab DWORD,然后赋值为: 1 (0x1)即可

  禁用程序选项

  在

  HKEY_CURRENT_USER/Software/Policies/Microsoft/

  Internet Explorer/Control Panel

  新建一个名为 ProgramsTab DWORD,然后赋值为: 1 (0x1)即可

  禁用高级选项

  在

  HKEY_CURRENT_USER/Software/Policies/Microsoft/

  Internet Explorer/Control Panel

  新建一个名为 AdvancedTab DWORD,然后赋值为: 1 (0x1)即可

  禁用内容选项

  在

  HKEY_CURRENT_USER/Software/Policies/Microsoft/

  Internet Explorer/Control Panel

  新建一个名为 ContentTab DWORD,然后赋值为: 1 (0x1)即可

  禁止更改主页设置

  在

  HKEY_CURRENT_USER/Software/Policies/Microsoft/

  Internet Explorer/Control Panel

  新建一个名为 HomePage DWORD,然后赋值为: 1 (0x1)即可

  禁止使用代理服务器

  在

  HKEY_CURRENT_USER/Software/Policies/Microsoft/

  Internet Explorer/Control Panel

  新建一个名为 Proxy DWORD,然后赋值为: 1 (0x1)即可

  禁止IE的分级设置功能

  在

  HKEY_CURRENT_USER/Software/Policies/Microsoft/

  Internet Explorer/Control Panel

  新建一个名为 Ratings DWORD,然后赋值为: 1 (0x1)即可

  禁用临时文件设置

  在

  HKEY_CURRENT_USER/Software/Policies/Microsoft/

  Internet Explorer/Control Panel

  新建一个名为 Cache DWORD,然后赋值为: 1 (0x1)即可

  禁用历史记录设置

  在

  HKEY_CURRENT_USER/Software/Policies/Microsoft/

  Internet Explorer/Control Panel

  新建一个名为 History DWORD,然后赋值为: 1 (0x1)即可

  禁用更改颜色设置

  在

  HKEY_CURRENT_USER/Software/Policies/Microsoft/

  Internet Explorer/Control Panel

  新建一个名为 Colors DWORD,然后赋值为: 1 (0x1)即可

  禁用更改字体设置

  在

  HKEY_CURRENT_USER/Software/Policies/Microsoft/

  Internet Explorer/Control Panel

  新建一个名为 Fonts DWORD,然后赋值为: 1 (0x1)即可

  禁用更改语言设置

  在

  HKEY_CURRENT_USER/Software/Policies/Microsoft/

  Internet Explorer/Control Panel

  新建一个名为 Languages DWORD,然后赋值为: 1 (0x1)即可

  禁用更改辅助功能设

  在

  HKEY_CURRENT_USER/Software/Policies/Microsoft/

  Internet Explorer/Control Panel

  新建一个名为 Accessibility DWORD,然后赋值为: 1 (0x1)即可

  禁用重置web设置功能

  在

  HKEY_CURRENT_USER/Software/Policies/Microsoft/

  Internet Explorer/Control Panel

  新建一个名为 ResetWebSettings DWORD,然后赋值为: 1 (0x1)即可

  禁用更改证书设置

  在

  HKEY_CURRENT_USER/Software/Policies/Microsoft/

  Internet Explorer/Control Panel

  新建一个名为 Certificates DWORD,然后赋值为: 1 (0x1)即可

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
BHO(Browser Helper Object,浏览器辅助对象,简称BHO)   BHO是微软推出的作为浏览器对第三方程序员开放交互接口的业界标准,通过简单的代码就可以进入浏览器领域的“交互接口”(INTERACTIVED Interface)。通过这个接口,程序员可以编写代码获取浏览器的行为,比如“后退”、“前进”、“当前页面”等,利用BHO的交互特性,程序员还可以用代码控制浏览器行为,比如修改替换浏览器工具栏,添加自己的程序按钮等。这些在系统看来都是没有问题的。BHO原来的目的是为了更好的帮助程序员打造个性化浏览器,以及为程序提供更简洁的交互功能,现在很多IE个性化工具就是利用BHO的来实现。 编辑本段 技术优势   “浏览器劫持”是一种不同于普通病毒木马感染途径的网络攻击手段,而是使用各种技术(如DLL插件等)插件对用户的浏览器进行篡改。安装后,它们会成为浏览器的一部分,可以直接控制浏览器进行指定的操作,根据需要,可以让你打开指定的网站,甚至是收集你系统中的各种私密信息。最可怕的是只有当浏览器已经被劫持了,你才会发现,反应过来,原来电脑已经出现了问题。比如IE主页被改,开机就会弹出广告等等。目前,浏览器劫持已经成为Internet用户最大的威胁之一。其实“浏览器劫持”就是通过BHO的技术手段进入你的系统的,而这种技术是合法的。   从某种观点看,Internet Explorer同普通的Win32程序没有什么两样。借助于BHO,你可以写一个进程内COM对象,这个对象在每次启动时都要加载。这样的对象会在与浏览器相同的上下文中运行,并能对可用的窗口和模块执行任何行动。例如,一个BHO能够探测到典型的事件,如GoBack、GoForward、DocumentComplete等;另外BHO能够存取浏览器的菜单与工具栏并能做出修改,还能够产生新窗口来显示当前网页的一些额外信息,还能够安装钩子以监控一些消息和动作。 编辑本段 注册表位置   BHO在注册表中的位置是:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects,有兴趣的朋友可以在这里做做实验。不过一定要记住你更改的每一步,否则会出错的哦!   BHO对象依托于浏览器主窗口。实际上,这意味着一旦一个浏览器窗口产生,一个新的BHO对象实例就要生成。任何 BHO对象与浏览器实例的生命周期是一致的。其次, BHO仅存在于Internet Explorer 4.0及以后版本中。   如果你在使用Microsoft Windows? 98, Windows 2000, Windows 95, or Windows NT版本4.0 操作系统的话,也就一块运行了活动桌面外壳4.71,BHO也被 Windows资源管理器所支持。 BHO是一个COM进程内服务,注册于注册表中某一键下。在启动时,Internet Explorer查询那个键并把该键下的所有对象预以加载。   迅雷中TDAtOnce_Now.dll和xunleiBHO_Now.dll为安全   如何发现BHO里面的危险模块.   首先有一个能够查看进程的软件 冰刃就不错 下面以它为例:   先打开冰刃—会看到一个BHO在这里就可以看到危险BHO进程了
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值