C#基于Miniblink控件編寫一個(gè)簡(jiǎn)易的瀏覽器
更新時(shí)間:2024年01月31日 10:30:25 作者:搬磚的詩(shī)人Z
miniblink是一款精簡(jiǎn)小巧的瀏覽器控件,基于chromium精簡(jiǎn)而成,是市面上最小巧的chromium內(nèi)核控件沒有之一,本文將結(jié)合C#和Miniblink編寫一個(gè)簡(jiǎn)易的瀏覽器,感興趣的可以了解下
效果圖
項(xiàng)目結(jié)構(gòu)
實(shí)現(xiàn)代碼
using Miniblink; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.IO.Compression; using System.Linq; using System.Net; using System.Net.Security; using System.Runtime.InteropServices; using System.Security.Cryptography.X509Certificates; using System.Text; using System.Windows.Forms; using XinShiYun_PlatformTools.Common; namespace XinShiYun_PlatformTools { public partial class Chrome : Form { [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] public static extern bool InternetSetCookie(string lpszUrlName, string lbszCookieName, string lpszCookieData); /// <summary> /// 默認(rèn)瀏覽器 /// </summary> MiniblinkBrowser blinkBrowser; MouseHook mouse = new MouseHook(); JsonHelper jsonHelper = new JsonHelper(); public List<FavoriteModel> favoriteModels = new List<FavoriteModel>(); WebBrowser webBrowser = new WebBrowser(); string pageUrl = ""; public Chrome(string[] args) { InitializeComponent(); webBrowser.Visible = false; this.Controls.Add(webBrowser); if (args.Count() > 0) { pageUrl = args[0]; if (pageUrl.Contains("proplat:")) { pageUrl = pageUrl.Substring(14, pageUrl.Length - 14); } } this.MaximizedBounds = Screen.PrimaryScreen.WorkingArea; // Win32.SetClassLong(this.Handle, Win32.GCL_STYLE, Win32.GetClassLong(this.Handle, Win32.GCL_STYLE) | Win32.CS_DropSHADOW); myTab.Height = 50; SetStyles(); //mouse.OnMouseActivity += new MouseEventHandler(mouse_OnMouseActivity); //mouse.Start(); formStyleControl.ClickMaxEvent += FormStyleControl_ClickMaxEvent; formStyleControl.ClickMinEvent += FormStyleControl_ClickMinEvent; taskRegion.EnterSearchEvent += TaskRegion_EnterSearchEvent; taskRegion.ClickCollectionEvent += TaskRegion_ClickCollectionEvent; taskRegion.ClickFilesEvent += TaskRegion_ClickFilesEvent; taskRegion.ClickRefreshEvent += TaskRegion_ClickRefreshEvent; taskRegion.ClickLeftEvent += TaskRegion_ClickLeftEvent; taskRegion.ClickRightEvent += TaskRegion_ClickRightEvent; myTab.AddEvent += MyTab_AddEvent; myTab.ClickTabEvent += MyTab_ClickTabEvent; myTab.ClickCloseTabEvent += MyTab_ClickCloseTabEvent; blinkBrowser = new MiniblinkBrowser(); blinkBrowser.Name = "blinkBrowser_1"; blinkBrowser.Dock = DockStyle.Fill; blinkBrowser.NavigateBefore += BlinkBrowser_NavigateBefore; blinkBrowser.DocumentReady += BlinkBrowser_DocumentReady; blinkBrowser.Download += BlinkBrowser_Download; myTab.ActiveTab.myBlinkBrowser = blinkBrowser; panel_Page.Controls.Add(blinkBrowser); LoadFav(); if (!String.IsNullOrEmpty(pageUrl)) { taskRegion.SearchText = pageUrl; LoadChromeUrl(blinkBrowser, pageUrl); } } private void BlinkBrowser_Download(object sender, DownloadEventArgs e) { try { var cookie = blinkBrowser.Cookies.GetJSESSIONID(); if (cookie != null) { // MainView mainView = new MainView(e.Url, cookie.Value); mainView.WindowState = FormWindowState.Maximized; // mainView.ShowDialog(); InternetSetCookie(e.Url, "JSESSIONID", cookie.Value); webBrowser.Url = new Uri(e.Url); } } catch (Exception ex) { throw; } } private void FormStyleControl_ClickMinEvent(object sender, EventArgs e) { this.WindowState = FormWindowState.Minimized; } /// <summary> /// 注冊(cè)注冊(cè)表 /// </summary> private void Register() { string filePath = System.AppDomain.CurrentDomain.BaseDirectory + "Config\\Register.txt"; if (File.Exists(filePath)) { string value = TxtHelper.ReadText(filePath).Trim(); if (value == "0") { //未注冊(cè) RegisterTableHelper.Reg("proplat"); TxtHelper.WriteText(filePath, "1"); } } else { RegisterTableHelper.Reg("proplat"); TxtHelper.WriteText(filePath, "1"); } } /// <summary> /// 前進(jìn) /// </summary> private void TaskRegion_ClickRightEvent(object sender, EventArgs e) { var tab = myTab.ActiveTab; if (tab == null) return; if (tab.myBlinkBrowser == null) return; tab.myBlinkBrowser.GoForward(); taskRegion.IsBackPage = tab.myBlinkBrowser.CanGoBack; taskRegion.IsForwardPage = tab.myBlinkBrowser.CanGoForward; taskRegion.Refresh(); } /// <summary> /// 后退 /// </summary> private void TaskRegion_ClickLeftEvent(object sender, EventArgs e) { var tab = myTab.ActiveTab; if (tab == null) return; if (tab.myBlinkBrowser == null) return; tab.myBlinkBrowser.GoBack(); taskRegion.IsBackPage = tab.myBlinkBrowser.CanGoBack; taskRegion.IsForwardPage = tab.myBlinkBrowser.CanGoForward; taskRegion.Refresh(); } private void TaskRegion_ClickRefreshEvent(object sender, EventArgs e) { var tab = myTab.ActiveTab; if (tab == null) return; tab.myBlinkBrowser.Reload(); } private void LoadFav() { var list = jsonHelper.ReadFavorite(); favoriteModels = list; if (favoriteModels == null) return; if (favoriteModels.Count() <= 0) return; foreach (var item in favoriteModels) { contextMenuStrip_Fav.Items.Add(item.Title); } } private void TaskRegion_ClickFilesEvent(object sender, EventArgs e) { contextMenuStrip_Fav.Show(Control.MousePosition); } private void TaskRegion_ClickCollectionEvent(object sender, EventArgs e) { var tab = myTab.ActiveTab; if (tab == null) return; if (String.IsNullOrEmpty(tab.urlLink.Trim())) return; FavoriteModel model = new FavoriteModel(); model.Title = tab.TabTitle; model.Url = tab.urlLink; jsonHelper.AddFavorite(model); LoadFav(); MessageBox.Show("收藏成功"); } /// <summary> /// 關(guān)閉標(biāo)簽 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> /// <param name="tabPage"></param> private void MyTab_ClickCloseTabEvent(object sender, EventArgs e, MiniblinkBrowser browser) { if (browser != null) { panel_Page.Controls.Remove(browser); taskRegion.SearchText = ""; } } private void MyTab_ClickTabEvent(object sender, EventArgs e, TabPage tabPage) { foreach (Control item in panel_Page.Controls) { if (item.Name.Contains("blinkBrowser_")) { item.Visible = false; } } taskRegion.SearchText = ""; string name = "blinkBrowser_" + tabPage.Tag.ToString(); var list = panel_Page.Controls.Find(name, false); if (list == null) return; if (list.Count() <= 0) return; var mytab = (MiniblinkBrowser)list.First() as MiniblinkBrowser; mytab.Visible = true; taskRegion.SearchText = myTab.ActiveTab.urlLink; } /// <summary> /// 新增 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> /// <param name="tabPage"></param> private void MyTab_AddEvent(object sender, EventArgs e, TabPage tabPage) { foreach (Control item in panel_Page.Controls) { if (item.Name.Contains("blinkBrowser_")) { item.Visible = false; } } taskRegion.SearchText = ""; MiniblinkBrowser mblinkBrowser = new MiniblinkBrowser(); mblinkBrowser.Name = "blinkBrowser_" + tabPage.Tag.ToString(); mblinkBrowser.Dock = DockStyle.Fill; mblinkBrowser.NavigateBefore += BlinkBrowser_NavigateBefore; mblinkBrowser.DocumentReady += BlinkBrowser_DocumentReady; tabPage.myBlinkBrowser = mblinkBrowser; panel_Page.Controls.Add(mblinkBrowser); } private void BlinkBrowser_NavigateBefore(object sender, Miniblink.NavigateEventArgs e) { if (e.Type == NavigateType.BlankLink) { try { if (e.Url.Contains("downLoadYjsdHZJzdy")) { blinkBrowser.Cookies.GetCookies(e.Url); var cookie = blinkBrowser.Cookies.GetJSESSIONID(); if (cookie != null) { InternetSetCookie(e.Url, "JSESSIONID", cookie.Value); webBrowser.Url = new Uri(e.Url); } } else { myTab.AddTabFunction(); MyTab_Add(e.Url); } } catch (Exception ex) { } } } private void MyTab_Add(string url) { if (myTab.ActiveTab == null) return; foreach (Control item in panel_Page.Controls) { if (item.Name.Contains("blinkBrowser_")) { item.Visible = false; } } TabPage tabPage = myTab.ActiveTab; MiniblinkBrowser blinkBrowser = new MiniblinkBrowser(); blinkBrowser.Name = "blinkBrowser_" + tabPage.Tag.ToString(); blinkBrowser.Dock = DockStyle.Fill; blinkBrowser.NavigateBefore += BlinkBrowser_NavigateBefore; blinkBrowser.DocumentReady += BlinkBrowser_DocumentReady; tabPage.myBlinkBrowser = blinkBrowser; tabPage.urlLink = url; panel_Page.Controls.Add(blinkBrowser); LoadChromeUrl(blinkBrowser, url); } private void BlinkBrowser_DocumentReady(object sender, DocumentReadyEventArgs e) { try { taskRegion.SearchText = e.Frame.Url; TabPage tabPage = myTab.ActiveTab; if (tabPage != null) { tabPage.urlLink = e.Frame.Url; } if (myTab.ActiveTab != null) { myTab.ActiveTab.TabTitle = myTab.ActiveTab.myBlinkBrowser.DocumentTitle; } ShowForwardAndBack(); myTab.ActiveTab.myBlinkBrowser.Focus(); } catch (Exception) { } } private void TaskRegion_EnterSearchEvent(object sender, KeyEventArgs e) { if (String.IsNullOrEmpty(taskRegion.SearchText)) return; LoadChromeUrl(myTab.ActiveTab.myBlinkBrowser, taskRegion.SearchText); } /// <summary> /// 加載網(wǎng)頁(yè) /// </summary> /// <param name="mblinkBrowser"></param> private void LoadChromeUrl(MiniblinkBrowser mblinkBrowser, string url) { if (String.IsNullOrEmpty(url)) return; if (!url.Contains("http://") && !url.Contains("https://")) { taskRegion.SearchText = "http://" + url; url = "http://" + url; } mblinkBrowser.LoadUri(url); } /// <summary> /// 點(diǎn)擊最大化按鈕 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void FormStyleControl_ClickMaxEvent(object sender, EventArgs e) { if (this.WindowState == FormWindowState.Maximized) { formStyleControl.TabMaxImage = Resource.form_max; this.WindowState = FormWindowState.Normal; } else { formStyleControl.TabMaxImage = Resource.form_recovery; this.WindowState = FormWindowState.Maximized; } } void mouse_OnMouseActivity(object sender, MouseEventArgs e) { //int x = this.Location.X + formStyleControl.Location.X; //int y = this.Location.Y + formStyleControl.Location.Y; //Rectangle formRect = new Rectangle(new Point(x, y), formStyleControl.Size); //if (!formRect.Contains(e.Location)) //{ // LeaveFormEvent(); //} 收藏 //var rectCollection = taskRegion.GetControlLocation("taskBtn_File"); //int collectionX = this.Location.X + rectCollection.X; //int collectionY = this.Location.Y + rectCollection.Y; //Rectangle collectionRect = new Rectangle(new Point(collectionX, collectionY), rectCollection.Size); //if (!collectionRect.Contains(e.Location)) //{ // taskRegion.SetCollectionBackColor(); //} 刷新 //var rectRefresh = taskRegion.GetControlLocation("taskBtn_Refresh"); //int refreshX = this.Location.X + rectRefresh.X; //int refreshY = this.Location.Y + rectRefresh.Y; //Rectangle refreshRect = new Rectangle(new Point(refreshX, refreshY), rectRefresh.Size); //if (!refreshRect.Contains(e.Location)) //{ // taskRegion.SetRefreshBackColor(); //} } private void LeaveFormEvent() { formStyleControl.SetBackColor(); } private void SetStyles() { SetStyle( ControlStyles.UserPaint | ControlStyles.AllPaintingInWmPaint | ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw | ControlStyles.DoubleBuffer, true); //強(qiáng)制分配樣式重新應(yīng)用到控件上 UpdateStyles(); base.AutoScaleMode = AutoScaleMode.None; } #region 移動(dòng)窗體的dll [DllImport("user32.dll")] public static extern bool ReleaseCapture(); [DllImport("user32.dll")] public static extern bool SendMessage(IntPtr hwnd, int wMsg, int wParam, int lParam); public const int WM_SYSCOMMAND = 0x0112; public const int SC_MOVE = 0xF010; public const int HTCAPTION = 0x0002; #endregion //移動(dòng)窗體 protected override void OnMouseDown(MouseEventArgs e) { //釋放鼠標(biāo)焦點(diǎn)捕獲 Win32.ReleaseCapture(); //向當(dāng)前窗體發(fā)送拖動(dòng)消息 Win32.SendMessage(this.Handle, 0x0112, 0xF011, 0); base.OnMouseUp(e); base.OnMouseDown(e); } private void myTab_MouseDownEvent(object sender, MouseEventArgs e) { OnMouseDown(e); } private void Chrome_Load(object sender, EventArgs e) { Register(); } private void formStyleControl_ClickCloseEvent(object sender, EventArgs e) { Application.Exit(); } private void contextMenuStrip_Fav_ItemClicked(object sender, ToolStripItemClickedEventArgs e) { string name = e.ClickedItem.Text; var list = favoriteModels.Where(s => s.Title.Contains(name)).ToList(); if (list == null) { return; } if (list.Count() > 0) { var data = list.First(); taskRegion.SearchText = data.Url; myTab.ActiveTab.myBlinkBrowser.LoadUri(data.Url); this.Refresh(); } } /// <summary> /// 是否顯示前進(jìn)后退 /// </summary> private void ShowForwardAndBack() { var tab = myTab.ActiveTab; if (tab == null) return; if (tab.myBlinkBrowser == null) return; taskRegion.IsBackPage = tab.myBlinkBrowser.CanGoBack; taskRegion.IsForwardPage = tab.myBlinkBrowser.CanGoForward; taskRegion.Refresh(); } private void myTab_MouseDoubleClick(object sender, MouseEventArgs e) { } private void Chrome_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.F12) { //myTab.ActiveTab.myBlinkBrowser.ShowDevTools(); // blinkBrowser.ShowDevTools(); } } } }
以上就是C#基于Miniblink控件編寫一個(gè)簡(jiǎn)易的瀏覽器的詳細(xì)內(nèi)容,更多關(guān)于C# Miniblink瀏覽器的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Unity C#打包AssetBundle與場(chǎng)景詳解
這篇文章主要給大家介紹了關(guān)于Unity C#打包AssetBundle與場(chǎng)景的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02C#實(shí)現(xiàn)的上傳圖片、保存圖片、加水印、生成縮略圖功能示例
這篇文章主要介紹了C#實(shí)現(xiàn)的上傳圖片、保存圖片、加水印、生成縮略圖功能,結(jié)合實(shí)例形式較為詳細(xì)的分析了C#圖片上傳、保存、水印、縮略圖等相關(guān)操作技巧,需要的朋友可以參考下2019-02-02C#控制臺(tái)程序輸出等腰三角形并居中顯示實(shí)例
這篇文章主要介紹了C#控制臺(tái)程序輸出等腰三角形并居中顯示實(shí)例,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-03-03C#實(shí)現(xiàn)動(dòng)態(tài)數(shù)字時(shí)鐘和日歷
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)動(dòng)態(tài)數(shù)字時(shí)鐘和日歷的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06c# 使用WebRequest實(shí)現(xiàn)多文件上傳
這篇文章主要介紹了c# 使用WebRequest實(shí)現(xiàn)多文件上傳的方法,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下2021-03-03