C#编程之[Winform]CefSharp ——js调用c#方法
小标 2018-10-22 来源 : 阅读 2114 评论 0

摘要:本文主要向大家介绍了C#编程之[Winform]CefSharp ——js调用c#方法,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助。

本文主要向大家介绍了C#编程之[Winform]CefSharp ——js调用c#方法,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助。

有时我们在winform中嵌入浏览器,需要在页面上读取电脑上的一些信息,这个时候就需要用到CefSharp的RegisterJsObject进行注册方法然后供js进行调用了。
一个例子
我们在winform中嵌入的页面中,显示电脑的信息,电脑信息通过winform进行读取,js调用获取电脑信息的方法,并将最终结果以json字符串的形式传递到js端,js获取到这些信息并在页面上进行显示。
定义一个专门处理js回调的类

    /// 


    /// js c#回调类
    /// 


    class ScriptCallbackManager
    {
        /// 


        /// 查找电脑信息
        /// 


        /// 


        public void FindComputerInfo(IJavascriptCallback javascriptCallback)
        {

            Task.Factory.StartNew(async () =>
            {

                using (javascriptCallback)
                {
                    Computer computer = new Computer();
                    string response = JsonConvert.SerializeObject(new
                    {
                        cpu_id = computer.CPU_Id,
                        disk_id = computer.Disk_Id,
                        host_name = computer.HostName,
                        networkcard = computer.NetworkCard,
                        serialNumber = computer.SerialNumber_Manufacturer_Product.Item1,
                        manufacturer = computer.SerialNumber_Manufacturer_Product.Item2,
                        product = computer.SerialNumber_Manufacturer_Product.Item3,
                    });
                    await javascriptCallback.ExecuteAsync(response);
                }
            });

        }


    }

其中computer类为获取电脑信息的操作类

    /// 


    /// 电脑信息类
    /// 


    public class Computer
    {
        /// 


        /// 查找cpu的id
        /// 


        /// 


        public string CPU_Id
        {
            get
            {
                try
                {
                    string str = string.Empty;
                    ManagementClass mcCPU = new ManagementClass("win32_Processor");
                    ManagementObjectCollection mocCPU = mcCPU.GetInstances();
                    foreach (ManagementObject m in mocCPU)
                    {
                        str = m["Processorid"].ToString().Trim().Substring(0, 8);
                        break;
                    }
                    return str;
                }
                catch (Exception)
                {
                    return string.Empty;
                }
            }
        }
        public string Disk_Id
        {
            get
            {
                try
                {
                    string hdId = string.Empty;
                    ManagementClass hardDisk = new ManagementClass("win32_DiskDrive");
                    ManagementObjectCollection hardDiskC = hardDisk.GetInstances();
                    foreach (ManagementObject m in hardDiskC)
                    {
                        hdId = m.Properties["Model"].Value.ToString();//WDC WD800BB-56JKC0
                        break;
                    }
                    return hdId;
                }
                catch (Exception)
                {

                    return string.Empty;
                }
            }
        }
        /// 


        /// 网卡
        /// 


        public string NetworkCard
        {
            get
            {
                try
                {
                    string MoAddress = string.Empty;
                    ManagementClass networkAdapter = new ManagementClass("Win32_NetworkAdapterConfiguration");
                    ManagementObjectCollection adapterC = networkAdapter.GetInstances();
                    foreach (ManagementObject m in adapterC)
                    {
                        if ((bool)m["IPEnabled"] == true)
                        {
                            MoAddress = m["MacAddress"].ToString().Trim();
                            m.Dispose();
                        }
                    }
                    return MoAddress;
                }
                catch
                {
                    return string.Empty;
                }
            }
        }
        /// 


        /// 获取序列号,制造商,型号
        /// 


        public Tuple

 SerialNumber_Manufacturer_Product
        {
            get
            {
                try
                {
                    Tuple tuple = null; new Tuple(string.Empty, string.Empty, string.Empty);
                    ManagementObjectSearcher mos = new ManagementObjectSearcher("select * from Win32_baseboard");


                    foreach (ManagementObject m in mos.Get())
                    {
                        tuple = new Tuple(m["SerialNumber"].ToString(), m["Manufacturer"].ToString(), m["Product"].ToString());
                    }
                    return tuple;
                }
                catch (Exception)
                {

                    return null;
                }
            }
        }
        /// 
        /// 计算机名称
        /// 

        public string HostName
        {
            get
            {
                return System.Net.Dns.GetHostName();
            }
        }
    }

嵌入的页面





    
    
    
    


    
    



单击按钮,在页面上显示当前电脑信息
窗体代码

    /// 
    /// 主窗体
    /// 

    public partial class MainFrm : Form
    {
        private CefSharp.CefSettings _settings;
        CefSharp.WinForms.ChromiumWebBrowser _webView;
        public MainFrm()
        {
            InitializeComponent();
            _settings = new CefSharp.CefSettings();
            CefSharp.Cef.Initialize(_settings);
            this.FormClosed += MainFrm_FormClosed;
        }

        void MainFrm_FormClosed(object sender, FormClosedEventArgs e)
        {
            if (_webView != null)
            {
                _webView.Dispose();
            }
        }

        private void MainFrm_Load(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Maximized;
            string url = "file:///E:/xxx/bin/x64/Debug/lenovo/test.html";
            LoadPage(url);
            
        }
        /// 
        /// 加载页面
        /// 

        /// 
        private void LoadPage(string url)
        {
            if (_webView == null)
            {
                _webView = new CefSharp.WinForms.ChromiumWebBrowser(url);
                _webView.Dock = DockStyle.Fill;
                _webView.LifeSpanHandler = new OpenPageSelf();
                _webView.RegisterJsObject("googleBrower", new ScriptCallbackManager(), new CefSharp.BindingOptions { CamelCaseJavascriptNames = false });
                this.Controls.Add(_webView);
            }
            else
            {
                _webView.Load(url);
            }
        }
    }

总结
通过在winform嵌入浏览器,可以很方便处理h5页面的展示,不用再使用winform再开发一个客户端的程序,完全可以嵌入要开发的h5应用,这样完全应用了h5的特点,可以在电脑端,移动端访问,而不是每个终端都写代码。

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C#.NET频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved