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

📄 webbrowsercontroller.cs

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

namespace APLib.Windows.Control
{
	/// <summary>
	/// 多页面浏览器控制界面类
	/// 自定义控件,提供导航按钮,地址栏和代理
	/// </summary>
	public partial class WebBrowserController : UserControl
	{
		#region WebProxy

		/// <summary>
		/// 代理服务器管理类
		/// </summary>
		public class WebProxy
		{
			/// <summary>
			/// singleton模式
			/// </summary>
			private static WebProxy instance;
			/// <summary>
			/// 代理服务器列表
			/// </summary>
			private List<string> proxyServer;
			/// <summary>
			/// 代理服务器管理类事件委托
			/// </summary>
			/// <param name="param">参数</param>
			public delegate void ProxyEventHandler(object param);
			/// <summary>
			/// 添加代理服务器事件
			/// </summary>
			public event ProxyEventHandler ProxyServerAdded;
			/// <summary>
			/// 删除代理服务器事件
			/// </summary>
			public event ProxyEventHandler ProxyServerRemoved;
			/// <summary>
			/// 代理服务器列表改变事件
			/// </summary>
			public event ProxyEventHandler ProxyServerChanged;
			/// <summary>
			/// 代理状态改变事件
			/// </summary>
			public event ProxyEventHandler ProxyStateChanged;

			/// <summary>
			/// 构造函数
			/// </summary>
			private WebProxy()
			{
				proxyServer = new List<string>();
			}
			/// <summary>
			/// 获取代理管理类实例
			/// </summary>
			/// <returns>代理管理类对象</returns>
			public static WebProxy GetInstance()
			{
				if (instance == null)
					instance = new WebProxy();
				return instance;
			}
			/// <summary>
			/// 设置代理服务器
			/// </summary>
			/// <param name="proxy">IP:PORT</param>
			public string ProxyServer
			{
				get
				{
					return Registry.GetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings", "ProxyServer", null) as string;
				}
				set
				{
					Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings", "ProxyServer", value, RegistryValueKind.String);
					FireServerChangedEvent(value);
				}
			}
			/// <summary>
			/// 开启或关闭代理
			/// </summary>
			public bool IsProxyEnabled
			{
				get
				{
					return (int)Registry.GetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings", "ProxyEnable", 0) == 1;
				}
				set
				{
					Registry.SetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings", "ProxyEnable", value ? 1 : 0, RegistryValueKind.DWord);
					ActiveProxy();
					if (ProxyStateChanged != null)
						ProxyStateChanged(value);
				}
			}
			/// <summary>
			/// 通知IE代理服务器或代理状态改变
			/// </summary>
			public void ActiveProxy()
			{
				API.InternetSetOption(IntPtr.Zero, InternetOptionFlags.INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0);
			}
			/// <summary>
			/// 添加代理服务器
			/// </summary>
			/// <param name="proxy">要添加的代理服务器地址</param>
			/// <example>218.57.243.51:80</example>
			public void AddServer(string proxy)
			{
				if (!proxyServer.Contains(proxy))
				{
					proxyServer.Add(proxy);
					if (ProxyServerAdded != null)
						ProxyServerAdded(proxy);
				}
			}
			/// <summary>
			/// 删除代理服务器
			/// </summary>
			/// <param name="proxy">要删除的代理服务器地址</param>
			public void RemoveServer(string proxy)
			{
				if (proxyServer.Contains(proxy))
				{
					proxyServer.Remove(proxy);
					if (ProxyServerRemoved != null)
						ProxyServerRemoved(proxy);
				}
			}
			/// <summary>
			/// 获取所有代理服务器地址
			/// </summary>
			/// <returns>代理服务器地址数组</returns>
			public string[] GetAllServer()
			{
				return proxyServer.ToArray();
			}
			/// <summary>
			/// 调用ProxyServerChanged事件
			/// </summary>
			/// <param name="server">ProxyServerChanged事件参数</param>
			public void FireServerChangedEvent(string server)
			{
				if (ProxyServerChanged != null)
					ProxyServerChanged(server);
			}
		}

		#endregion

		/// <summary>
		/// 代理状态
		/// </summary>
		private bool proxyEnabled;
		/// <summary>
		/// 代理管理器对象
		/// </summary>
		private WebProxy proxy;
		/// <summary>
		/// 多页面浏览器对象
		/// </summary>
		private PagedWebBrowser webBrowser;
		/// <summary>
		/// 获取代理状态
		/// </summary>
		public bool ProxyEnable { get { return proxyEnabled; } }
		/// <summary>
		/// 获取多页面浏览器对象
		/// </summary>
		public PagedWebBrowser WebBrowser { get { return this.webBrowser; } }

		/// <summary>
		/// 构造函数
		/// </summary>
		public WebBrowserController()
		{
			InitializeComponent();
			proxy = WebProxy.GetInstance();
			proxy.ProxyServerAdded += new WebProxy.ProxyEventHandler(proxy_ProxyServerAdded);
			proxy.ProxyServerRemoved += new WebProxy.ProxyEventHandler(proxy_ProxyServerRemoved);
			proxy.ProxyServerChanged += new WebProxy.ProxyEventHandler(proxy_ProxyServerChanged);
			proxy.ProxyStateChanged += new WebProxy.ProxyEventHandler(proxy_ProxyStateChanged);
			proxyEnabled = proxy.IsProxyEnabled;
		}
		/// <summary>
		/// 构造函数
		/// </summary>
		/// <param name="browser">进行控制的多页面浏览器对象</param>
		public WebBrowserController(PagedWebBrowser browser):base()
		{
			Attach(browser);
		}
		/// <summary>
		/// 设置进行控制的多页面浏览器对象
		/// </summary>
		/// <param name="browser">多页面浏览器对象</param>
		public void Attach(PagedWebBrowser browser)
		{
			if (webBrowser != null)
			{
				webBrowser.CanGoBackChanged -= new EventHandler(browser_CanGoBackChanged);
				webBrowser.CanGoForwardChanged -= new EventHandler(browser_CanGoForwardChanged);
				webBrowser.PageLocationChanged -= new EventHandler(browser_PageLocationChanged);
				webBrowser.Dispose();
			}
			this.webBrowser = browser;
			webBrowser.Dock = DockStyle.Fill;
			browser.CanGoBackChanged += new EventHandler(browser_CanGoBackChanged);
			browser.CanGoForwardChanged += new EventHandler(browser_CanGoForwardChanged);
			browser.PageLocationChanged += new EventHandler(browser_PageLocationChanged);
		}

		/// <summary>
		/// 启用所有界面元素
		/// </summary>
		public void UpdateUI()
		{
			wtURL.Enabled = true;
			if (webBrowser.Web != null)
			{
				wtBack.Enabled = webBrowser.Web.CanGoBack;
				wtForward.Enabled = webBrowser.Web.CanGoForward;
			}
			wtStop.Enabled = true;
			wtRefresh.Enabled = true;
			wtProxy.Enabled = true;
			System.Resources.ResourceManager resources = new System.Resources.ResourceManager(this.GetType());
			if (proxyEnabled)
				wtProxy.Image = global::APLib.Windows.Control.Properties.Resource.Proxy;
			else
				wtProxy.Image = global::APLib.Windows.Control.Properties.Resource.ProxyDisabled;
		}

		#region WebProxy事件

		private void proxy_ProxyStateChanged(object param)
		{
			System.Resources.ResourceManager resources = new System.Resources.ResourceManager(this.GetType());
			if (proxyEnabled)
				wtProxy.Image = global::APLib.Windows.Control.Properties.Resource.Proxy;
			else
				wtProxy.Image = global::APLib.Windows.Control.Properties.Resource.ProxyDisabled;
		}

		private void proxy_ProxyServerChanged(object param)
		{
			string server = param as string;
			foreach (ToolStripMenuItem item in menuProxy.Items)
			{
				if (item.Text == server)
					item.Checked = true;
				else
					item.Checked = false;
			}
		}

		private void proxy_ProxyServerRemoved(object param)
		{
			ToolStripMenuItem item = menuProxy.Items[param as string] as ToolStripMenuItem;
			if (item.Checked)
				proxy.IsProxyEnabled = false;
			menuProxy.Items.Remove(item);
			item.Dispose();
		}

		private void proxy_ProxyServerAdded(object param)
		{
			ToolStripItem item = menuProxy.Items.Add(param as string);
			item.Name = param as string;
			item.DisplayStyle = ToolStripItemDisplayStyle.Text;
		}

		#endregion

		#region PagedWebBrowser事件处理函数

		private void browser_CanGoBackChanged(object sender, EventArgs e)
		{
			WebBrowserEx web = sender as WebBrowserEx;
			wtBack.Enabled = web.CanGoBack;
		}

		private void browser_CanGoForwardChanged(object sender, EventArgs e)
		{
			WebBrowserEx web = sender as WebBrowserEx;
			wtForward.Enabled = web.CanGoForward;
		}

		private void browser_PageLocationChanged(object sender, EventArgs e)
		{
			WebBrowserEx web = sender as WebBrowserEx;
			if (web.Url != null)
				wtURL.Text = web.Url.ToString();
		}

		#endregion

		#region ToolStrip事件

		private void wtURL_KeyPress(object sender, KeyPressEventArgs e)
		{
			if (e.KeyChar == 13)
			{
				if (webBrowser.TabPages.Count == 0)
					webBrowser.CreateNewPage(wtURL.Text, true);
				else
					webBrowser.Open(wtURL.Text);
				e.Handled = true;
			}
		}

		private void wtURL_MouseEnter(object sender, EventArgs e)
		{
			wtURL.Focus();
			wtURL.SelectAll();
		}

		private void wtRefresh_Click(object sender, EventArgs e)
		{
			WebBrowserEx web = webBrowser.Web;
			if (web != null)
				web.Refresh(WebBrowserRefreshOption.Completely);
		}

		private void wtNew_Click(object sender, EventArgs e)
		{
			webBrowser.CreateNewPage(null, true);
		}

		private void wtStop_Click(object sender, EventArgs e)
		{
			WebBrowserEx web = webBrowser.Web;
			if (web != null)
				web.Stop();
		}

		private void wtBack_Click(object sender, EventArgs e)
		{
			WebBrowserEx web = webBrowser.Web;
			if (web != null)
				web.GoBack();
		}

		private void wtForward_Click(object sender, EventArgs e)
		{
			WebBrowserEx web = webBrowser.Web;
			if (web != null)
				web.GoForward();
		}

		private void wtGohome_Click(object sender, EventArgs e)
		{
			if (webBrowser.Web == null)
				WebBrowser.CreateNewPage(null, true);
			webBrowser.Web.GoHome();
		}

		private void wtProxy_Click(object sender, EventArgs e)
		{
			proxyEnabled = !proxyEnabled;
			proxy.IsProxyEnabled = proxyEnabled;
		}

		private void wtProxy_MouseUp(object sender, MouseEventArgs e)
		{
			if (e.Button == MouseButtons.Right)
			{
				menuProxy.Show(webTool.PointToScreen(new Point(e.X + webTool.Width - wtProxy.Width, e.Y)));
			}
		}

		private void webTool_SizeChanged(object sender, EventArgs e)
		{
			int width = 0;
			foreach (ToolStripItem item in webTool.Items)
				width += item.Width;
			width -= wtURL.Width;
			wtURL.Width = webTool.Width - width - 20;
		}

		#endregion

		#region menuProxy事件

		private void editProxyList_Click(object sender, EventArgs e)
		{
			ProxyServerManagement dlg = new ProxyServerManagement();
			dlg.ShowDialog();
		}

		private void menuProxy_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
		{
			ToolStripMenuItem item=e.ClickedItem as ToolStripMenuItem;
			if (item != editProxyList)
			{
				foreach (ToolStripMenuItem i in menuProxy.Items)
					i.Checked = false;
				item.Checked = true;
				proxy.ProxyServer = e.ClickedItem.Text;
			}
		}

		#endregion
	}
}

⌨️ 快捷键说明

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