⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 webbrowserex.cs

📁 自己做的一个浏览器~~大家请看看~如果合意给个彩头
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Security.Permissions;
using System.Runtime.InteropServices;
using System.Text.RegularExpressions;
using APLib.Native;

namespace APLib.Windows.Control
{
	/// <summary>
	/// 浏览器控件类
	/// 继承自WebBrowser
	/// </summary>
	public class WebBrowserEx : WebBrowser
	{
		/// <summary>
		/// 字体缩放值枚举
		/// </summary>
		public enum ZoomLevel
		{
			Smallest = 0,
			Small = 1,
			Middle = 2,
			Larger = 3,
			Largest = 4
		}
		/// <summary>
		/// 下载项目字节数
		/// </summary>
		private long totalSize;
		/// <summary>
		/// 已经下载字节数
		/// </summary>
		private long downloadSize;

		#region 属性

		/// <summary>
		/// 获取下载项目字节数
		/// </summary>
		public long TotalSize { get { return totalSize; } }
		/// <summary>
		/// 获取已经下载字节数
		/// </summary>
		public long DownloadSize { get { return downloadSize; } }
		/// <summary>
		/// IWebBrowser2接口对象,参见MSDN
		/// </summary>
		protected IWebBrowser2 webBroswer2;
		/// <summary>
		/// Application对象,参见MSDN
		/// </summary>
		public object Application { get { return webBroswer2.Application; } }

		#endregion

		#region 事件

		/// <summary>
		/// 开始下载事件
		/// </summary>
		public event EventHandler Downloading;
		/// <summary>
		/// 下载完成事件
		/// </summary>
		public event EventHandler DownloadComplete;
		/// <summary>
		/// 开始跳转到网址事件
		/// </summary>
		public event EventHandler<WebBrowserExNavigatingEventArgs> Navigating2;
		/// <summary>
		/// 打开新窗口事件
		/// </summary>
		public event EventHandler<WebBrowserExNavigatingEventArgs> NewWindow2;
		/// <summary>
		/// 关闭窗口事件
		/// </summary>
		public event EventHandler Quit;
		/// <summary>
		/// 标题改变事件
		/// </summary>
		public event EventHandler TitleChanged;
		/// <summary>
		/// 字体缩放事件
		/// </summary>
		public event EventHandler ZoomLevelChanged;

		#endregion

		/// <summary>
		/// 参见AxHost
		/// </summary>
		protected System.Windows.Forms.AxHost.ConnectionPointCookie cookie;
		/// <summary>
		/// 参见AxHost
		/// </summary>
		protected WebBrowserExtendedEvents events;

		/// <summary>
		/// 重载AttachInterfaces,获取IWebBrowser2接口对象
		/// </summary>
		/// <param name="nativeActiveXObject">ActiveX对象</param>
		[PermissionSet(SecurityAction.LinkDemand, Name = "FullTrust")]
		protected override void AttachInterfaces(object nativeActiveXObject)
		{
			webBroswer2 = (IWebBrowser2)nativeActiveXObject;
			base.AttachInterfaces(nativeActiveXObject);
		}
		/// <summary>
		/// 重载DetachInterfaces,释放IWebBrowser2接口对象
		/// </summary>
		[PermissionSet(SecurityAction.LinkDemand, Name = "FullTrust")]
		protected override void DetachInterfaces()
		{
			webBroswer2 = null;
			base.DetachInterfaces();
		}
		/// <summary>
		/// 重载CreateSink,映射DWebBrowserEvent2事件接口到WebBrowserExtendedEvents类
		/// </summary>
		[PermissionSet(SecurityAction.LinkDemand, Name = "FullTrust")]
		protected override void CreateSink()
		{
			base.CreateSink();
			events = new WebBrowserExtendedEvents(this);
			cookie = new AxHost.ConnectionPointCookie(this.ActiveXInstance, events, typeof(DWebBrowserEvents2));
		}
		/// <summary>
		/// 重载DetachSink,释放WebBrowserExtendedEvents对象
		/// </summary>
		[PermissionSet(SecurityAction.LinkDemand, Name = "FullTrust")]
		protected override void DetachSink()
		{
			if (null != cookie)
			{
				cookie.Disconnect();
				cookie = null;
			}
		}
		/// <summary>
		/// 下载进度改变事件
		/// </summary>
		protected override void OnProgressChanged(WebBrowserProgressChangedEventArgs e)
		{
			base.OnProgressChanged(e);
			totalSize = e.MaximumProgress;
			downloadSize = e.CurrentProgress;
		}
		/// <summary>
		/// 开始下载事件
		/// </summary>
		protected void OnDownloading(EventArgs e)
		{
			if (Downloading != null)
				Downloading(this, e);
		}
		/// <summary>
		/// 下载完成事件
		/// </summary>
		protected virtual void OnDownloadComplete(EventArgs e)
		{
			if (DownloadComplete != null)
				DownloadComplete(this, e);
		}
		/// <summary>
		/// 打开新窗口事件
		/// </summary>
		protected void OnNewWindow2(WebBrowserExNavigatingEventArgs e)
		{
			if (e == null)
				throw new ArgumentNullException("e");
			if (this.NewWindow2 != null)
				this.NewWindow2(this, e);
		}
		/// <summary>
		/// 开始跳转到网址事件
		/// </summary>
		protected void OnNavigating2(WebBrowserExNavigatingEventArgs e)
		{
			if (e == null)
				throw new ArgumentNullException("e");
			if (this.Navigating2 != null)
				this.Navigating2(this, e);
		}
		/// <summary>
		/// 关闭窗口事件
		/// </summary>
		protected void OnQuit()
		{
			EventHandler exit = Quit;
			if (exit != null)
				exit(this, EventArgs.Empty);
		}
		/// <summary>
		/// 标题改变事件
		/// </summary>
		protected void OnTitleChange(EventArgs e)
		{
			if (TitleChanged != null)
				TitleChanged(this, e);
		}
		/// <summary>
		/// 重载消息处理函数,触发OnQuit事件
		/// </summary>
		/// <param name="m"></param>
		[PermissionSet(SecurityAction.LinkDemand, Name = "FullTrust")]
		protected override void WndProc(ref Message m)
		{
			if (m.Msg == (int)WindowsMessages.WM_PARENTNOTIFY)
			{
				int wParam = m.WParam.ToInt32();
				if ((int)(wParam & 0xFFFF) == (int)WindowsMessages.WM_DESTROY)
					this.OnQuit();
			}
			base.WndProc(ref m);
		}
		/// <summary>
		/// 获取字体缩放值
		/// </summary>
		public ZoomLevel GetZoom()
		{
			object pvaIn=null;
			IntPtr pvaOut = IntPtr.Zero;
			webBroswer2.ExecWB(OLECMDID.OLECMDID_ZOOM, OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, ref pvaIn, pvaOut);
			try
			{
				return (ZoomLevel)pvaOut.ToInt32();
			}
			catch
			{
			}
			return ZoomLevel.Middle;
		}
		/// <summary>
		/// 设置字体缩放值
		/// </summary>
		/// <param name="zoom">将要设置的字体缩放值</param>
		public void SetZoom(ZoomLevel zoom)
		{
			int z = (int)zoom;
			object pvaIn = z;
			IntPtr pvaOut = IntPtr.Zero;
			webBroswer2.ExecWB(OLECMDID.OLECMDID_ZOOM, OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, ref pvaIn, pvaOut);
			if (ZoomLevelChanged != null)
				ZoomLevelChanged(this, EventArgs.Empty);
		}

		#region WebBrowserExtendedEvents

		/// <summary>
		/// DWebBrowserEvent2事件处理类,参见MSDN
		/// </summary>
		protected class WebBrowserExtendedEvents : DWebBrowserEvents2
		{
			/// <summary>
			/// 浏览器对象
			/// </summary>
			WebBrowserEx browser;

			/// <summary>
			/// 构造函数
			/// </summary>
			public WebBrowserExtendedEvents()
			{
			}
			/// <summary>
			/// 构造函数
			/// </summary>
			/// <param name="browser">要处理事件所对应的浏览器对象</param>
			public WebBrowserExtendedEvents(WebBrowserEx browser)
			{
				this.browser = browser;
			}

			#region DWebBrowserEvents2成员,参见MSDN
			
			public void BeforeNavigate2(object pDisp, ref object URL, ref object flags, ref object targetFrameName, ref object postData, ref object headers, ref bool cancel)
			{
				Uri urlUri = new Uri(URL.ToString());
				string tFrame = null;
				if (targetFrameName != null)
					tFrame = targetFrameName.ToString();
				WebBrowserExNavigatingEventArgs args = new WebBrowserExNavigatingEventArgs(pDisp, urlUri, tFrame, UrlContext.None);
				browser.OnNavigating2(args);
				cancel = args.Cancel;
				pDisp = args.AutomationObject;
			}

			public void NewWindow2(ref object pDisp, ref bool cancel)
			{
				WebBrowserExNavigatingEventArgs args = new WebBrowserExNavigatingEventArgs(pDisp, null, null, UrlContext.None);
				browser.OnNewWindow2(args);
				cancel = args.Cancel;
				pDisp = args.AutomationObject;
			}

			public void NewWindow3(ref object ppDisp, ref bool Cancel, uint dwFlags, string bstrUrlContext, string bstrUrl)
			{
				WebBrowserExNavigatingEventArgs args = new WebBrowserExNavigatingEventArgs(ppDisp, new Uri(bstrUrl), null, (UrlContext)dwFlags);
				browser.OnNewWindow2(args);
				Cancel = args.Cancel;
				ppDisp = args.AutomationObject;
			}

			public void DownloadBegin()
			{
				browser.OnDownloading(EventArgs.Empty);
			}

			public void DownloadComplete()
			{
				browser.OnDownloadComplete(EventArgs.Empty);
			}

			public void TitleChange(string text)
			{
				browser.OnTitleChange(EventArgs.Empty);
			}

			#region 未处理的事件

			// This event doesn't fire. 
			[DispId(0x00000107)]
			public void WindowClosing(bool isChildWindow, ref bool cancel)
			{
			}

			public void OnQuit()
			{

			}

			public void StatusTextChange(string text)
			{
			}

			public void ProgressChange(int progress, int progressMax)
			{
			}

			public void PropertyChange(string szProperty)
			{
			}

			public void NavigateComplete2(object pDisp, ref object URL)
			{
			}

			public void DocumentComplete(object pDisp, ref object URL)
			{
			}

			public void OnVisible(bool visible)
			{
			}

			public void OnToolBar(bool toolBar)
			{
			}

			public void OnMenuBar(bool menuBar)
			{
			}

			public void OnStatusBar(bool statusBar)
			{
			}

			public void OnFullScreen(bool fullScreen)
			{
			}

			public void OnTheaterMode(bool theaterMode)
			{
			}

			public void WindowSetResizable(bool resizable)
			{
			}

			public void WindowSetLeft(int left)
			{
			}

			public void WindowSetTop(int top)
			{
			}

			public void WindowSetWidth(int width)
			{
			}

			public void WindowSetHeight(int height)
			{
			}

			public void SetSecureLockIcon(int secureLockIcon)
			{
			}

			public void FileDownload(ref bool cancel)
			{
			}

			public void NavigateError(object pDisp, ref object URL, ref object frame, ref object statusCode, ref bool cancel)
			{
			}

			public void PrintTemplateInstantiation(object pDisp)
			{
			}

			public void PrintTemplateTeardown(object pDisp)
			{
			}

			public void UpdatePageStatus(object pDisp, ref object nPage, ref object fDone)
			{
			}

			public void PrivacyImpactedStateChange(bool bImpacted)
			{
			}

			public void CommandStateChange(int Command, bool Enable)
			{
			}

			public void ClientToHostWindow(ref int CX, ref int CY)
			{
			}
			#endregion

			#endregion
		}

		#endregion
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -