using System; using System.IO; 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 CefSharp.Web; using System.Windows; using System.Diagnostics; namespace TestWebview { public partial class Form1 : Form { public ChromiumWebBrowser chromeBrowser; Process process_clash_cmd ; Process process_firefox = new Process(); public string web_url = "http://127.0.0.1:5173/"; public Form1() { InitializeComponent(); this.Text = "畅游" + FingerPrint.Value();//.get_user_code(); InitializeChromium(); } //初始化浏览器并启动 public void InitializeChromium() { //参数设置 CefSettings settings = new CefSettings() { Locale = "zh-CN", CachePath = Directory.GetCurrentDirectory() + @"\Cache" }; Cef.Initialize(settings); //创建实例 chromeBrowser = new ChromiumWebBrowser(web_url); chromeBrowser.LifeSpanHandler = new LifeSpanHandler(); chromeBrowser.MenuHandler = new MenuHandler(); //this.Controls.Add(chromeBrowser); this.Controls.Add(chromeBrowser); chromeBrowser.Dock = DockStyle.Fill; // 允许以同步的方式注册C#的对象到JS中 chromeBrowser.JavascriptObjectRepository.Settings.LegacyBindingEnabled = true; CefSharpSettings.WcfEnabled = true; // 注册C#的对象到JS中的代码必须在Cef的Browser加载之前调用 chromeBrowser.JavascriptObjectRepository.Register("backendSharp", new CefCustomObject(chromeBrowser,this), false, options: BindingOptions.DefaultBinder); } private void button1_Click(object sender, EventArgs e) { var jsCode = $"displayMessage('C#里的消息调用')"; chromeBrowser.ExecuteScriptAsync(jsCode); } private void button2_Click(object sender, EventArgs e) { process_clash_cmd = new Process(); process_clash_cmd.StartInfo.FileName = "clash.exe"; process_clash_cmd.StartInfo.Arguments = ""; process_clash_cmd.StartInfo.UseShellExecute = false; process_clash_cmd.StartInfo.CreateNoWindow = true; process_clash_cmd.StartInfo.RedirectStandardOutput = true; process_clash_cmd.Start(); process_clash_cmd.BeginOutputReadLine(); process_clash_cmd.OutputDataReceived += new DataReceivedEventHandler(process_clash_OutputDataReceived); } private void process_clash_OutputDataReceived(object sender, DataReceivedEventArgs e) { if (String.IsNullOrEmpty(e.Data) == false) { //var jsCode = $"displayMessage('"+ e.Data + "')"; //chromeBrowser.ExecuteScriptAsync(jsCode); Console.WriteLine(e.Data); } } private void button4_Click(object sender, EventArgs e) { process_firefox.StartInfo.FileName = @".\FirefoxPortable\FirefoxPortable.exe"; process_firefox.Start(); } private void button5_Click(object sender, EventArgs e) { Process[] proc = Process.GetProcessesByName("Firefox"); for (int i = 0; i < proc.Length; i++) { proc[i].Kill(); //逐个结束进程. } } private void button3_Click(object sender, EventArgs e) { Process[] proc = Process.GetProcessesByName("clash"); for (int i = 0; i < proc.Length; i++) { proc[i].Kill(); //逐个结束进程. } } } }