wangzhibo
2023-10-31 86070cd00485c47a2c5c3ffa4a9bae6648dd05c6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
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();  //逐个结束进程.
            }
        }
    }
}