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 CefSharp; using CefSharp.WinForms; using System.Configuration; using System.Drawing.Drawing2D; using System.Runtime.InteropServices; using System.Xml; using System.Threading; using System.Diagnostics; using System.Net; using CefSharp.WinForms.Internals; namespace Lecall { public partial class FrmMain : Form { public string ServerURL = ""; public string PhoneNum = ""; public static string MainURL = ""; public FrmMain() { //InitializeComponent(); //this.WindowState = FormWindowState.Maximized; //InitializeChromium(); // Register an object in javascript named "cefCustomObject" with function of the CefCustomObject class :3 //chromeBrowser.RegisterJsObject("formProcess", new FormProcess(chromeBrowser, this)); //MessageBox.Show("4"); InitializeComponent(); //MessageBox.Show("1"); } private void OnBrowserTitleChanged(object sender, TitleChangedEventArgs args) { this.InvokeOnUiThreadIfRequired(() => Text = args.Title); } private void OnPropertyChanged(object sender, PropertyChangedEventArgs e) { if (this.IsHandleCreated) { this.BeginInvoke(new MethodInvoker(() => { if (this.IsHandleCreated && !this.IsDisposed) { if (this.toolTip1.Active) { this.toolTip1.Hide(this); } } })); } if (e.PropertyName == "TooltipText") //tooltipText改变事件 { string tooltipText = this.wb.TooltipText; Point elementPos = new Point(Cursor.Position.X - this.Location.X, Cursor.Position.Y - this.Location.Y); if (!String.IsNullOrEmpty(tooltipText)) { this.Invoke(new MethodInvoker(() => { System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer(); timer.Interval = 600; timer.Tick += (timer_sender, timer_e) => { Point nowPos = new Point(Cursor.Position.X - this.Location.X, Cursor.Position.Y - this.Location.Y); //if ((nowPos.X <= elementPos.X + 20 && nowPos.X >= elementPos.X - 20) && (nowPos.Y <= elementPos.Y + 20 && nowPos.Y >= elementPos.Y - 20)) //鼠标停留了500ms(范围限定在一定范围) if (this.wb.TooltipText == tooltipText) //600毫秒后,tooltipText没变 { this.toolTip1.Show(tooltipText, this, nowPos.X + 15, nowPos.Y + 15); } (timer_sender as System.Windows.Forms.Timer).Stop(); (timer_sender as System.Windows.Forms.Timer).Dispose(); }; timer.Start(); })); } } } ChromiumWebBrowser wb; private void Form1_FormClosing(object sender, FormClosingEventArgs e) { Cef.Shutdown(); } private void Form1_KeyDown(object sender, KeyEventArgs e) { /*if (e.Control && e.KeyCode == Keys.F1) { //设置服务器地址 string inputcap = InputBox("基础设置", "请输入服务器地址:", ServerURL); if (inputcap != null && inputcap != "") { string path = Environment.CurrentDirectory + @"\Config.ini"; //指定ini文件的路径 IniFile ini = new IniFile(path); ini.IniWriteValue("基础设置", "服务器地址", inputcap);//string FpOrderNumber = ini.IniReadValue("登录设置", "服务器地址");//将tsslMo.Text的值写到键FpOrderNumber中去 //重新加载页面 this.Controls.Remove(wb); //设置停靠方式 wb.Dock = DockStyle.Fill; //加入到当前窗体中 this.Controls.Add(wb); } }*/ } #region InputForm private string[] InputBox(string Caption, string Hint, string Default, string Hint1, string Default1) { Form InputForm = new Form(); InputForm.MinimizeBox = false; InputForm.MaximizeBox = false; InputForm.StartPosition = FormStartPosition.CenterScreen; InputForm.Width = 380; InputForm.Height = 150; InputForm.FormBorderStyle = FormBorderStyle.FixedSingle; InputForm.Font = new Font("微软雅黑", 9, FontStyle.Regular); //InputForm.Font.Size = 10; InputForm.ShowIcon = false; InputForm.Text = Caption; Label lbl = new Label(); lbl.Text = Hint; lbl.Left = 10; lbl.Top = 20; lbl.Parent = InputForm; lbl.AutoSize = true; TextBox tb = new TextBox(); //tb.PasswordChar = '*'; tb.Left = 85; tb.Top = 18; tb.Width = 260; tb.Parent = InputForm; tb.Text = Default; tb.SelectAll(); //2017-8-5 Label lbl1 = new Label(); lbl1.Text = Hint1; lbl1.Left = 35; lbl1.Top = 50; lbl1.Parent = InputForm; lbl1.AutoSize = true; TextBox tb1 = new TextBox(); //tb.PasswordChar = '*'; tb1.Left = 85; tb1.Top = 48; tb1.Width = 260; tb1.Parent = InputForm; tb1.Text = Default1; Button btnok = new Button(); btnok.Left = 100; btnok.Top = 80; btnok.Parent = InputForm; btnok.Text = "确定"; InputForm.AcceptButton = btnok;//回车响应 btnok.DialogResult = DialogResult.OK; Button btncancal = new Button(); btncancal.Left = 190; btncancal.Top = 80; btncancal.Parent = InputForm; btncancal.Text = "取消"; btncancal.DialogResult = DialogResult.Cancel; try { if (InputForm.ShowDialog() == DialogResult.OK) { string[] inputcap=new string[2]; inputcap[0] = tb.Text; inputcap[1] = tb1.Text; return inputcap; } else { return null; } } finally { InputForm.Dispose(); } } #endregion #region /*[DllImport("User32.dll")] private static extern IntPtr GetWindowDC(IntPtr hwnd); [DllImport("User32.dll")] private static extern int ReleaseDC(IntPtr hwnd, IntPtr hdc); [DllImport("Kernel32.dll")] private static extern int GetLastError(); Rectangle m_rect = new Rectangle(800, 10, 80, 20); protected override void WndProc(ref Message m) { //拦截双击标题栏、移动窗体的系统消息 //if (m.Msg != 0xA3 && m.Msg != 0x0003 && m.WParam != (IntPtr)0xF012) //{ // base.WndProc(ref m); //} base.WndProc(ref m); switch (m.Msg) { case 0x86://WM_NCACTIVATE goto case 0x85; case 0x85://WM_NCPAINT { IntPtr hDC = GetWindowDC(m.HWnd); //把DC转换为.NET的Graphics就可以很方便地使用Framework提供的绘图功能了 Graphics gs = Graphics.FromHdc(hDC); //Graphics gs = this .CreateGraphics(); gs.FillRectangle(new LinearGradientBrush(m_rect, Color.Transparent, Color.Transparent, LinearGradientMode.BackwardDiagonal), m_rect); //gs.FillRectangle(new LinearGradientBrush(m_rect, Color.Pink, Color.Purple, LinearGradientMode.BackwardDiagonal), m_rect); StringFormat strFmt = new StringFormat(); strFmt.Alignment = StringAlignment.Center; strFmt.LineAlignment = StringAlignment.Center; gs.DrawString("基础设置", this.Font, Brushes.DarkSlateGray, m_rect, strFmt);//▲ //gs.DrawString("设置", this.Font, Brushes.BlanchedAlmond, m_rect, strFmt);//▲ gs.Dispose(); //释放GDI资源 ReleaseDC(m.HWnd, hDC); break; } case 0xA1://WM_NCLBUTTONDOWN { Point mousePoint = new Point((int)m.LParam); mousePoint.Offset(-this.Left, -this.Top); if (m_rect.Contains(mousePoint)) { wb.ShowDevTools(); //MessageBox.Show("hello"); //设置服务器地址 string inputcap = InputBox("基础设置", "请输入服务器地址:", ServerURL); if (inputcap != null && inputcap != "") { string path = Environment.CurrentDirectory + @"\Config.ini"; //指定ini文件的路径 IniFile ini = new IniFile(path); ini.IniWriteValue("基础设置", "服务器地址", inputcap);//string FpOrderNumber = ini.IniReadValue("登录设置", "服务器地址");//将tsslMo.Text的值写到键FpOrderNumber中去 //重新加载页面 this.Controls.Remove(wb); wb = new ChromiumWebBrowser(inputcap); //设置停靠方式 wb.Dock = DockStyle.Fill; //加入到当前窗体中 this.Controls.Add(wb); } } break; } case 0xA3://WM_NCACTIVATE m.WParam = System.IntPtr.Zero; //this.WindowState = FormWindowState.Maximized; break; case 0xA9://WM_NCACTIVATE break; } } private void Form1_SizeChanged(object sender, EventArgs e) { m_rect = new Rectangle(this.Size.Width - 190, 10, 80, 20); }*/ #endregion private void Form1_Load(object sender, EventArgs e) { //Rectangle rect = System.Windows.Forms.SystemInformation.VirtualScreen; int width = rect.Width; int height = rect.Height; ////this.MaximumSize = new Size(width, height); //this.MinimumSize = new Size(width, height); //this.WindowState = FormWindowState.Maximized; //IntPtr test = FindWindowEx(0, 0, "Shell_TrayWnd", ""); //Console.WriteLine(test.ToString()); //int test5 = SetWindowPos(test, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW); //this.TopMost = true; //this.FormBorderStyle = FormBorderStyle.None; //this.Width = Screen.PrimaryScreen.Bounds.Width; //this.Height = Screen.PrimaryScreen.Bounds.Height; //this.Top = 0; //this.Left = 0; #region 2017-10-31 this.WindowState = FormWindowState.Maximized; //必须进行初始化,否则就出来页面啦。 #region 2017-8-30测试 //var setting = new CefSharp.CefSettings(); //setting.Locale = "zh-CN"; ////缓存路径 //setting.CachePath = "/BrowserCache"; ////浏览器引擎的语言 //setting.AcceptLanguageList = "zh-CN,zh;q=0.8"; //setting.LocalesDirPath = "/localeDir"; ////日志文件 //setting.LogFile = "/LogData"; //setting.PersistSessionCookies = true; //setting.UserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"; //setting.UserDataPath = "/userData"; //CefSharp.Cef.Initialize(setting); #endregion CefSettings settings = new CefSettings(); settings.Locale = "zh-CN"; settings.AcceptLanguageList = "zh-CN"; Cef.Initialize(settings); //CefSharp.Cef.Initialize(); string path = Environment.CurrentDirectory + @"\Config.ini"; //指定ini文件的路径 //MessageBox.Show("2"); IniFile ini = new IniFile(path); //MessageBox.Show("3"); ServerURL = ini.IniReadValue("基础设置", "服务器地址"); PhoneNum = ini.IniReadValue("基础设置", "分机号"); MainURL = ini.IniReadValue("软件升级设置", "服务器地址"); //MessageBox.Show(ServerURL); //实例化控件 wb = new CefSharp.WinForms.ChromiumWebBrowser(ServerURL); //wb = new ChromiumWebBrowser(ServerURL); //设置停靠方式 wb.Dock = DockStyle.Fill; //设置cookie var mngr = Cef.GetGlobalCookieManager(); CefSharp.Cookie Ac = new CefSharp.Cookie(); Ac.Name = "extno"; Ac.Value = PhoneNum; Ac.Expires = DateTime.MinValue; mngr.SetCookieAsync(ServerURL, Ac); //加入到当前窗体中 this.panel1.Controls.Add(wb); wb.MenuHandler = new MenuHandler(); wb.DownloadHandler = new DownloadHandler(); //wb.PropertyChanged += OnPropertyChanged; //2017-10-30 //wb.TitleChanged += OnBrowserTitleChanged; this.Text = "河南华谊乐呼呼叫中心V" + LocalVersion; #endregion } #region 全屏去任务栏 /*public const int HWND_NOTOPMOST = -2; public const int SWP_SHOWWINDOW = 0x0040; [DllImport("user32.dll")] private static extern IntPtr FindWindowEx(int hwnd2, int hWnd2, string lpsz1, string lpsz2); [DllImport("user32.dll")] private static extern int GetWindowLong(IntPtr hwnd, int nIndex); [DllImport("user32.dll")] private static extern int SetWindowPos(IntPtr hwnd, int hWndInsertAfter, int x, int y, int cx, int cy, int wFlags);*/ #endregion string devToolsUrl; private void tbnDebug_Click(object sender, EventArgs e) { wb.ShowDevTools(); } private void tbtbnSet_Click(object sender, EventArgs e) { //设置服务器地址 string[] inputcap = InputBox("基础设置", "服务器地址:", ServerURL,"分机号:",PhoneNum); if (inputcap != null ) { string path = Environment.CurrentDirectory + @"\Config.ini"; //指定ini文件的路径 IniFile ini = new IniFile(path); ini.IniWriteValue("基础设置", "服务器地址", inputcap[0]);//string FpOrderNumber = ini.IniReadValue("登录设置", "服务器地址");//将tsslMo.Text的值写到键FpOrderNumber中去 ini.IniWriteValue("基础设置", "分机号", inputcap[1]); ServerURL = inputcap[0]; PhoneNum = inputcap[1]; var request = WebRequest.Create(ServerURL) as HttpWebRequest; string x = request.Host; ini.IniWriteValue("软件升级设置", "服务器地址", "http://" + x); MainURL = "http://" + x; //2017-8-5将分机号写cookie //var cookieManager = CefSharp.Cef.GetGlobalCookieManager(); //await cookieManager.SetCookieAsync(ServerURL, //new CefSharp.Cookie() //{ // Domain = ServerURL, // Name = "extno", // Value = PhoneNum, // Expires = DateTime.MinValue //}); //重新加载页面 this.panel1 .Controls.Remove(wb); wb = new ChromiumWebBrowser(inputcap[0]); //设置停靠方式 wb.Dock = DockStyle.Fill; //分机号设置cookie var mngr = Cef.GetGlobalCookieManager(); CefSharp.Cookie Ac = new CefSharp.Cookie(); Ac.Name = "extno"; Ac.Value = PhoneNum; Ac.Expires = DateTime.MinValue; mngr.SetCookieAsync(ServerURL, Ac); //加入到当前窗体中 this.panel1.Controls.Add(wb); } } /// /// 显示调试窗口 /// /*public void ShowDevWin() { try { if (string.IsNullOrEmpty(devToolsUrl)) { devToolsUrl = web_view.Browser.GetHost().GetDevToolsUrl(true); wb.ShowDevTools(); } var frame = web_view.Browser.GetMainFrame(); //frame.ExecuteJavaScript(string.Format("window.open('{0}');", devToolsUrl), "about:blank", 0); var p = Process.Start(devToolsUrl); } catch { MessageBox.Show("请等待页面加载完成之后再打开调试器"); } }*/ public static string LocalVersion = ""; #region 判断是否更新版本 /// /// 判断是否更新 /// private static void Update() { try { //获取当前程序的版本号 比较进行升级 LocalVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(); string xmlFilePath = MainURL+@"/LecallUpdate/Update.xml?v=" + System.DateTime.Now.ToString("yyyyMMddhhmmss"); //string strHTML = Commoon.HttpWeb.GetHTML(xmlFilePath); //Commoon.XmlHelper xml = new Commoon.XmlHelper(); //xml.LoadXml(strHTML); XmlDocument doc = new XmlDocument(); doc.Load(xmlFilePath); XmlElement root = doc.DocumentElement; XmlNode versionNode = root.SelectSingleNode("version"); string DistalVersion = versionNode.InnerText; if (DistalVersion != LocalVersion) { frmUpdateMsg frmupdatemsg = new frmUpdateMsg(); frmupdatemsg.Msg = root.SelectSingleNode("description").InnerText; frmupdatemsg.ShowDialog(); } } catch { //InfoLog.frmLog frmlog = new InfoLog.frmLog(); //frmlog.AddLog("验证新版本出现问题"); } } #endregion [DllImport("user32.dll")]//设置窗体位活动窗体 private static extern bool SetForegroundWindow(IntPtr hWnd); [DllImport("user32.dll")]//设置窗体状态 private static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow); private const int SW_RESTORE = 9; //用原来的大小和位置显示一个窗口 [STAThread] static void Main() { bool createForm = false;//是否创建引用 using (Mutex mutex = new Mutex(true, "ATT", out createForm)) { //MessageBox.Show("5"); if (createForm) {//如果系统中不存在"AHookProgram"元素 则创建窗体 //Application.EnableVisualStyles(); //Application.SetCompatibleTextRenderingDefault(false); //MessageBox.Show("6"); #region 版本判断是否更新 string path = Environment.CurrentDirectory + @"\Config.ini"; //指定ini文件的路径 IniFile ini = new IniFile(path); MainURL = ini.IniReadValue("软件升级设置", "服务器地址"); Update(); #endregion //MessageBox.Show("7"); Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new FrmMain()); } else {//如果系统中存在"AHookProgram"元素 则表明程序已经运行 //MessageBox.Show("程序已经运行在进程中!", "提示"); //遍历进程根据进程名找寻窗体 //MessageBox.Show("8"); Process current = Process.GetCurrentProcess(); foreach (Process p in Process.GetProcessesByName(current.ProcessName)) { //MessageBox.Show("9"); if (p.Id != current.Id) {//会查上来两个 将不是自己的那个显示出来 //MessageBox.Show("10"); SetForegroundWindow(p.MainWindowHandle);//激活窗体 ShowWindowAsync(p.MainWindowHandle, SW_RESTORE);//设置窗体状态 } } } } } private void FrmMain_FormClosed(object sender, FormClosedEventArgs e) { System.Environment.Exit(0); } } }