在好例子网,分享、交流、成长!
您当前所在位置:首页C# 开发实例C#语言基础 → IE浏览器监控程序源码

IE浏览器监控程序源码

C#语言基础

下载此实例
  • 开发语言:C#
  • 实例大小:0.97M
  • 下载次数:31
  • 浏览次数:237
  • 发布时间:2019-10-10
  • 实例类别:C#语言基础
  • 发 布 人:xsj_009
  • 文件格式:.rar
  • 所需积分:2
 相关标签: 浏览器 程序 浏览 监控

实例介绍

【实例简介】IE浏览器监控程序,有详细的代码注释与说明

【实例截图】

from clipboard

【核心代码】

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

//------------------------------------------------------
using System.Collections;
using System.IO;//File.AppendAllText (String, String)
using System.Reflection;
using System.Runtime.InteropServices;
//------------------------------------------------------
using System.Threading;//使用延时

using SHDocVw;
using MSHTML;//程序原来是小写mshtml  升级了win10 这里必须改为大写MSHTML

using System.Web;

namespace WindowsFormsApplication1
{
    public partial class frmListenToIE : Form
    {
        public frmListenToIE()
        {
            InitializeComponent();
        }

        //IE监控器对象_ieWatcher 
        private IE_Watcher _ieWatcher = null;

        private void frmListenToIE_Load(object sender, EventArgs e)
        {

            //实例化对象_ieWatcher,将窗体对象作为参数传入? 
            _ieWatcher = new IE_Watcher(this);
            //定义动态资料记录器对象 
            //_ieWatcher.UrlText = new UrlHistory("d:\\urlhistory.txt");
            _ieWatcher.UrlText = new UrlHistory(System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase   "urlhistory.txt");//在程序运行目录下生成访问url记录文件
            //btnGetWindow_Click(sender, e);//点击获取ie浏览器打开的网页的列表,把获取ie浏览器打开的网页的列表写到listBox1中

        }

        private void btnGetWindow_Click(object sender, EventArgs e)
        {
            btnGetWindow.Enabled = false;//先设置按钮不可用,防止连续点击,多次启动ie

            //调用系统启动ie浏览器并访问url 
            System.Diagnostics.Process.Start("iexplore.exe", "http://127.0.0.1/mainpage.html");

            Thread.Sleep(8000);//程序暂停8秒,等待操作系统启动ie,再向下执行,否则iexplore.exe可能还没完全运行起来,导致下面获取不到ie的url列表
            //获取所有已打开的IE窗体 
            IList windows = _ieWatcher.GetOpenedWindows();//获取ie浏览器打开的网页的列表

            foreach (SHDocVw.InternetExplorer ie in windows)
            {
                //在这里加入自定义对象
                listBox1.Items.Add(new IE_Item(ie));//把获取ie浏览器打开的网页的列表写到listBox1中
            }

            //选中listBox1的第一个,点击按钮进行ie事件监听
            if (listBox1.Items.Count >=1)
            {
                listBox1.SelectedIndex=0;//设置选中第一行,本程序中只有一行,如果是多用户切换是可以是多行
                btnListen_Click(sender, e);//开始监视ie
            }
            

        }

        private void btnListen_Click(object sender, EventArgs e)
        {
            //btnListen.Enabled = false;//先设置按钮不可用,防止连续点击
            //开始监视你选中的IE窗体 
            if (listBox1.SelectedIndex >= 0)
            {
                //将选中的Item转换为IE_Item对象 
                IE_Item item = listBox1.SelectedItem as IE_Item;
                //item.IE 
                _ieWatcher.ListenWindow(item.IE, this.ShowLog);//把listBox1作为对象传给_ieWatcher;把this.ShowLog处理过程传给_ieWatcher,ShowLog修改listBox2
                                                               //这样,_ieWatcher可以访问listBox1与listBox2
                ShowLog("开始监视ie......");
            }
        }

        //显示IE动态消息 
        public void ShowLog(string content)
        {
            listBox2.Items.Add(content);
            //下面两句设置listBox2滚动显示到最后一行,便于查看最新的web访问url状态
            listBox2.SelectedIndex = listBox2.Items.Count - 1;
            listBox2.Focus();
        }

        private void listBox2_SelectedIndexChanged(object sender, EventArgs e)
        {
            textBox1.Text = listBox2.Text;
        }

    }

    //IE窗口监视器
    public class IE_Watcher
    {
        private Form _owner = null;

        public IE_Watcher(Form owner)
        {
            _owner = owner;
        }

        [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
        private static extern IntPtr GetForegroundWindow();          //WINAPI 获取当前活动窗体的句柄 

        [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
        private static extern bool SetForegroundWindow(IntPtr hWnd); //WINAPI 设置当前活动窗体的句柄 

        //跨线程访问主线程内的Log控件,自定义委托 
        public delegate void ShowLogHandle(string msg);
        //Txt文件记录器 
        private UrlHistory _urltext = null;
        public UrlHistory UrlText { get { return _urltext; } set { _urltext = value; } }


        //获取IE浏览器打开的网页列表: GetOpenedWindows()返回值是list
        public IList GetOpenedWindows()
        {
            IList list = new ArrayList();

            //注:要引入SHDocVw COM对象哦!!! Add Refernces - > COM Objects -> Microsft Internet Controls 
            //1、Microsoft Internet Controls
            //2、Microsoft HTML Object Library
            //Assembly Interop.SHDocVw 
            SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindows();//old:SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindowsClass();
            string filename;
            foreach (SHDocVw.InternetExplorer ie in shellWindows)
            {
                filename = Path.GetFileNameWithoutExtension(ie.FullName).ToLower();
                //注:iexplore, 如Maxthon浏览器 
                if (filename.Equals("iexplore")) list.Add(ie);
            }

            return list;
        }

        //当前监控的IE窗体对象 
        private SHDocVw.InternetExplorer _ie = null;
        public SHDocVw.InternetExplorer CurrentIE { get { return _ie; } }

        //显示动态消息委托,用于跨线程 
        private ShowLogHandle _showLog = null;

        //开始监控IE窗体 
        public void ListenWindow(SHDocVw.InternetExplorer ie, ShowLogHandle showLog)
        {
            _ie = ie;//  在IE_Watcher中_ie是全局变量,定义是:private SHDocVw.InternetExplorer _ie = null;
            _showLog = showLog;

            //置顶被监控的IE窗体 
            if (new IntPtr(ie.HWND) != GetForegroundWindow()) SetForegroundWindow(new IntPtr(ie.HWND));

            //绑定事件: IE打开网页时触发这个事件 
            ie.NavigateComplete2  = new SHDocVw.DWebBrowserEvents2_NavigateComplete2EventHandler(OnNavigateComplete);
            ie.TitleChange  = new SHDocVw.DWebBrowserEvents2_TitleChangeEventHandler(OnTitleChange);
            
            //绑定其他事件与事件处理:用户提交数据
            ie.BeforeNavigate2  = new SHDocVw.DWebBrowserEvents2_BeforeNavigate2EventHandler(OnBeforeNavigate2);   
        }

        
        //获取用户post的数据
        private void OnBeforeNavigate2(object pDisp, ref object URL, ref object Flags, ref object TargetFrameName, ref object PostData, ref object Headers, ref bool Cancel)
        {
            //throw new NotImplementedException();
            string postDataText="";

            if (PostData != null)
            {
                //UTF8编码的Byte[]转换为String类型:
                //byte[] byteArray = new byte[100];
                //String str = System.Text.Encoding.UTF8.GetString(byteArray);
                postDataText = System.Text.Encoding.UTF8.GetString(PostData as byte[]); //响应 BeforeNavigate2 事件
                                                                                        //下面需要进行UTF8 urldecode解码postDataText
                                                                                        //using System.Web;
                postDataText = System.Web.HttpUtility.UrlDecode(postDataText, System.Text.Encoding.UTF8);//将Url中的UTF8编码转换为简体汉字
                //System.Windows.Forms.MessageBox.Show(postDataText);
            }

            if (_urltext != null)
            {
                _urltext.WriteHistory("posturl :" URL.ToString());                            //写入文本文件
                if(postDataText.Length >0)_urltext.WriteHistory("postdata:" postDataText);    //写入用户提交的数据post数据
                this.ShowMsg("打开:"   URL.ToString());                                       //窗口显示动态消息
                if (postDataText.Length > 0) this.ShowMsg("postdata:"   postDataText);        //显示用户提交的数据
            }

        }

        //打开网页完成的处理 
        private void OnNavigateComplete(object pDisp, ref object URL)
        {
            if (_urltext != null)
            {
                _urltext.WriteHistory("打开:"   URL.ToString());  //写入文本文件 
                this.ShowMsg("打开:"   URL.ToString());           //显示动态消息 
            }

            HtmlDocument doc = _ie.Document;
            int iCount = doc.Window.Frames.Count;

            for (int i = 0; i < iCount; i  )
            {
                string strurlscr = doc.Window.Frames[i].Url.ToString();
                this.ShowMsg("iframe:"   strurlscr);


            }

        }

        public void OnTitleChange(string Text)
        {
            this.ShowMsg("标题:"   Text);
        }

        //跨线程访问主线程内的Log控件,给控件赋值 
        private void ShowMsg(string msg)
        {
            _owner.Invoke(_showLog, msg);
        }
    }

    //将IE窗体动态消息写文件
    /// <summary> 
    /// Txt文件记录器 
    /// </summary> 
    public class UrlHistory
    {
        private string _file;

        public UrlHistory(string file)
        {
            _file = file;
        }

        public void WriteHistory(string content)
        {
            File.AppendAllText(_file, content   "\r\n");
        }
    }


    //在ListBox控件Items属性插入自定义对象所定义的类
    /// <summary> 
    /// IE窗体对象,用于在ListBox内显示 
    /// </summary> 
    public class IE_Item
    {
        private SHDocVw.InternetExplorer _ie = null;
        public SHDocVw.InternetExplorer IE { get { return _ie; } }

        public string UrlName { get { return _ie.LocationName; } }

        public string UrlAddress { get { return _ie.LocationURL; } }

        public IE_Item(SHDocVw.InternetExplorer ie)
        {
            _ie = ie;
        }

        //关键是这个重载的方法哦!!! 在ListBox内显示的资料  
        public override string ToString()
        {
            return _ie.LocationName;
        }
    }


}


实例下载地址

IE浏览器监控程序源码

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警