using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Collections; using System.Reflection; using System.Drawing; using System.IO; using System.Drawing.Imaging; using System.Security.Permissions; using System.Runtime.InteropServices; using System.Text.RegularExpressions; namespace US.Browser.IE { /// /// webbrower统一使用接口区域 /// [PermissionSet(SecurityAction.Demand, Name = "FullTrust")] [System.Runtime.InteropServices.ComVisibleAttribute(true)] public class BrowserDAO { public WebBrowser _UWB;//头部操作的WebBrowser public List _UBL = new List();//所有的WebBrowser public USMain _UF;//使用域的控件区域 public FVCBrower _UFV; public RespondWeb _UVB; public Respond_setting RS; public Popup Popup; #region 创建头部窗体 /// /// 带参数构造 /// /// /// public BrowserDAO(WebBrowser UWB, USMain UF) { _UF = UF; _UWB = UWB; this._UFV = new FVCBrower(this);//初始化收藏夹 this._UVB = new RespondWeb(this, _UFV);//功能设置 this.RS = new Respond_setting();//设置区域 } /// /// 新建一个页面 /// /// /// public WebBrowser AddBrowser(string UURL, string UN) { Rectangle USZ = _UF.ClientRectangle; bool ty = _UWB.Location.Y != -35, ws = _UF.WindowState != FormWindowState.Maximized; Size SZ = ty ? ws ? new Size(USZ.Width - 6, USZ.Height - _UWB.Height - 6) : new Size(USZ.Width, USZ.Height - _UWB.Height) : new Size(USZ.Width, USZ.Height - 2); Point PT = ty ? ws ? new Point(3, _UWB.Height + 3) : PT = new Point(0, _UWB.Height) : new Point(0, 2); WebBrowser _t = new BrowserListener(UN, PT, SZ, UURL, this)._UWB; _UF.Controls.Add(_t); _UBL.Add(_t); return _t;//设置窗口 //添加窗口 } #endregion #region 头部功能区域 /// /// 关闭一个页面 /// /// public void CloseOneBrowser(string UN) { BLL.USIE.setTimeout(1, delegate(System.Timers.ElapsedEventArgs e) { try { int i; WebBrowser _UWB; for (i = 0; i < _UBL.Count; i++) { _UWB = _UBL[i]; if (_UWB.Name == UN) { _UBL.Remove(_UWB); _UWB.Dispose(); break; } } BLL.WindowHWND.freem(); } catch (Exception ex) { } }); return; } /// /// 关闭全部页面 /// public void CloseAllBrowser() { int i; WebBrowser _UWB; for (i = 0; i < _UBL.Count; i++) { _UWB = _UBL[i]; _UWB.Dispose(); _UBL.Remove(_UWB); } BLL.WindowHWND.freem(); } /// /// 获取指定的webbrower /// /// /// public WebBrowser FindBrowser(string UN) { int i; WebBrowser _UWB = null; for (i = 0; i < _UBL.Count; i++) { _UWB = _UBL[i]; if (_UWB.Name == UN) { break; } _UWB = null; } return _UWB; } /// /// 根据Url获取webbrower /// /// /// public WebBrowser FindWebUrl(string UN) { for (int i = 0; i < _UBL.Count; i++) { if (_UBL[i].Url.AbsoluteUri.IndexOf("http://www.1473.cn") > -1) { return _UBL[i]; } } return null; } /// /// 跳转指定的页面 /// /// /// public void ModifyOneBrowser(string UN, string UURL) { WebBrowser _UWB = this.FindBrowser(UN); BLL.WindowHWND.freem(); if (_UWB != null) { if (_UWB.Document == null) { CloseOneBrowser(UN); return; } _UWB.Url = new Uri(UURL); }// _UWB.Navigate(UURL); } /// /// 获取加载页面信息信息 /// /// /// public string BrowserToJson(WebBrowser _UWB, bool UE) { int i; string _UST = "", _UY = _UWB.Url.Scheme + "://" + _UWB.Url.Host; HtmlElementCollection UDE = _UWB.Document.GetElementsByTagName("link"); if (UE == false)//需要获取ico { for (i = 0; i < UDE.Count; i++) { if (UDE[i].GetAttribute("rel").ToLower() == "shortcut icon") { _UST = UDE[i].GetAttribute("href").ToString(); break; } } new Uri(_UST, UriKind.RelativeOrAbsolute); if (_UST == "") { _UST = _UWB.Url.Scheme + "://" + _UWB.Url.Host + (_UST == "" ? "/favicon.ico" : _UST); } else { _UST = new Uri(new Uri(_UY), _UST).ToString(); } MemoryStream _UMS = GetUrlImg(_UST, ImageFormat.Png); _UST = _UMS == null ? "" : "data:image/jpeg;base64," + Convert.ToBase64String(_UMS.GetBuffer()); if (_UMS != null) { _UMS.Close(); _UMS.Dispose(); } } List _T = new List { new string[] { "Name", _UWB.Name }, new string[] { "Shortcut_Icon", _UST }, new string[] { "Url", _UWB.Url == null ? "" : _UWB.Url.ToString() }, new string[] { "Visible", _UWB.Visible.ToString() }, new string[] { "Title", (_UWB.DocumentTitle == "" && _UWB.StatusText != "完成") ? _UWB.StatusText.ToString() : _UWB.DocumentTitle }, new string[] { "CanPrevious", _UWB.CanGoBack.ToString() }, new string[] { "CanNext", _UWB.CanGoForward.ToString() } }; Utitiy.StringJoiner _S = new Utitiy.StringJoiner(); _S = "{"; for (i = 0; i < _T.Count; i++) { _S += "'"; _S += _T[i][0]; _S += "':'"; _S += _T[i][1]; if (i != _T.Count - 1) { _S += "',"; } } _S += "'}"; return _S; } /// /// ico转化成png /// /// public static MemoryStream GetUrlImg(string img, ImageFormat tp) { try { System.Net.HttpWebRequest webrq = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(new Uri(img)); webrq.Timeout = 5000; webrq.ServicePoint.Expect100Continue = false; System.Net.HttpWebResponse webres = (System.Net.HttpWebResponse)webrq.GetResponse(); Bitmap imt; if (webres.StatusCode == System.Net.HttpStatusCode.OK && webres.ContentLength > 0) { using (Stream stream = webres.GetResponseStream()) { Image image = Image.FromStream(stream); using (imt = new Bitmap(16, 16)) { Graphics g = Graphics.FromImage(imt); g.Clear(System.Drawing.Color.Transparent); g.DrawImage(image, new System.Drawing.Rectangle(0, 0, 16, 16), new System.Drawing.Rectangle(0, 0, 16, 16), System.Drawing.GraphicsUnit.Pixel); MemoryStream ms = new MemoryStream(); imt.Save(ms, tp); imt.Dispose(); image.Dispose(); g.Dispose(); return ms; } } } webrq.Abort(); webres.Close(); } catch (Exception e) { }//输出的页面信息 return null; } /// /// 设置显示的webbower变化 /// public void ChangeBrowsersSize() { int i; WebBrowser _UWB; for (i = 0; i < _UBL.Count; i++) { _UWB = _UBL[i]; _UWB.Location = new Point(2, this._UWB.Height); _UWB.Width = this._UF.ClientRectangle.Width - 4; _UWB.Height = this._UF.ClientRectangle.Height - this._UWB.Height - 2; } } private FormWindowState _st; private bool F11TF = false; /// /// 统一F11 /// /// /// public void TYUWBF11(WebBrowser TopWB) { F11TF = !F11TF; if (F11TF)//全屏 { _st = _UF.WindowState; _UF.WindowState = FormWindowState.Maximized;//设置全屏 _UVB.BSSZ(new Point(0, 2), new Point(0, -35), new Size(_UF.Width, _UF.Height - 2), new Size(_UF.Width, TopWB.Height));//大小设置 } else { _UF.WindowState = _st; _UVB.DXBH(_st == FormWindowState.Maximized); } } #endregion #region 无用函数区域 ///// ///// 自定义计时器 ///// ///// ///// //public void SetTimeout() //{ // System.Timers.Timer _TM = new System.Timers.Timer(); // int i = 0;//计时器变量 // _TM.Elapsed += new System.Timers.ElapsedEventHandler(delegate(object sender, System.Timers.ElapsedEventArgs e) // { // i++; // /* if (_TM.AutoReset == false && i % 1 == 0) { Popup.UTC(); _TM.AutoReset = true; _TM.Interval = 1000; } // else if (i % 1800 == 0 && Popup.Visible == false) { Popup.UTC(); } // else if (i % 300 == 0) { Popup.REUTC(); }*/ // }); // //计时器执行时间区 _TM.Enabled = false; /*设置执行函数 例如: a() */ // _TM.Interval = 5000;//时间间隔 // _TM.Start();//启动事件 // //_TM.Enabled = true;//添加这个事件设置计时器是否可用 // _TM.AutoReset = false; //} #endregion } }