CEF与JavaScript交互读取电脑信息

CefSharp中c#和JavaScript交互读取电脑信息

介绍

CEF是由Marshall Greenblatt于2008年建立的基于Google Chromium的BSD许可开源项目与主要关注谷歌Chrome应用程序开发的Chromium项目自己不一样,CEF专一于在第三方应用程序中促进嵌入式浏览器用例。CEF经过提供生产质量稳定的API,发布跟踪特定Chromium版本和二进制发行版的分支机构,使用户免受基础Chromium和Blink代码复杂性的影响。CEF中的大多数功能都具备默认实现,这些实现提供丰富的功能,同时几乎不须要用户进行集成工做。目前,全球已有超过1亿个CEF安装实例嵌入到来自各类公司和行业的产品中。CEF维基百科页面上提供了使用CEF的公司和产品的部分列表CEF的一些用例包括:javascript

  • 在现有本机应用程序中嵌入符合HTML5的Web浏览器控件。
  • 建立轻量级本机“shell”应用程序,该应用程序托管主要使用Web技术开发的用户界面。
  • 在具备本身的自定义绘图框架的应用程序中“在屏幕外”呈现Web内容。
  • 充当自动测试现有Web属性和应用程序的主机。

CEF支持各类编程语言和操做系统,能够轻松集成到新的和现有的应用程序中。它从头开始设计,兼顾性能和易用性。基础框架包括经过本机库公开的C和C ++编程接口,这些接口将主机应用程序与Chromium和Blink实现细节隔离开来。它提供了浏览器和主机应用程序之间的紧密集成,包括对自定义插件,协议,JavaScript对象和JavaScript扩展的支持。主机应用程序能够选择控制资源加载,导航,上下文菜单,打印等,同时利用Google Chrome Web浏览器中提供的相同性能和HTML5技术。html

前言

有时咱们在winform与wpf中嵌入浏览器,须要在页面上读取电脑上的一些信息,这个时候就须要用到CefSharp的RegisterJsObject进行注册方法而后供js进行调用了。java

简单实例

咱们在winform中嵌入的页面中,显示电脑的信息,电脑信息经过winform进行读取,js调用获取电脑信息的方法,并将最终结果以json字符串的形式传递到js端,js获取到这些信息并在页面上进行显示。jquery

定义一个专门处理js回调的类ScriptCallbackManagerweb

 1 /// <summary>
 2     /// js c#回调类  3     /// </summary>
 4     class ScriptCallbackManager  5  {  6         /// <summary>
 7         /// 查找电脑信息  8         /// </summary>
 9         /// <param name="javascriptCallback"></param>
10         public void FindComputerInfo(IJavascriptCallback javascriptCallback) 11  { 12 
13             Task.Factory.StartNew(async () =>
14  { 15 
16                 using (javascriptCallback) 17  { 18                     Computer computer = new Computer(); 19                     string response = JsonConvert.SerializeObject(new
20  { 21                         cpu_id = computer.CPU_Id, 22                         disk_id = computer.Disk_Id, 23                         host_name = computer.HostName, 24                         networkcard = computer.NetworkCard, 25                         serialNumber = computer.SerialNumber_Manufacturer_Product.Item1, 26                         manufacturer = computer.SerialNumber_Manufacturer_Product.Item2, 27                         product = computer.SerialNumber_Manufacturer_Product.Item3, 28  }); 29                     await javascriptCallback.ExecuteAsync(response); 30  } 31  }); 32 
33  } 34 
35 
36     }
View Code

建立一个computer类为获取电脑信息的操做类shell

 1 /// <summary>
 2     /// 电脑信息类  3     /// </summary>
 4     public class Computer  5  {  6         /// <summary>
 7         /// 查找cpu的id  8         /// </summary>
 9         /// <returns></returns>
 10         public string CPU_Id  11  {  12             get
 13  {  14                 try
 15  {  16                     string str = string.Empty;  17                     ManagementClass mcCPU = new ManagementClass("win32_Processor");  18                     ManagementObjectCollection mocCPU = mcCPU.GetInstances();  19                     foreach (ManagementObject m in mocCPU)  20  {  21                         str = m["Processorid"].ToString().Trim().Substring(0, 8);  22                         break;  23  }  24                     return str;  25  }  26                 catch (Exception)  27  {  28                     return string.Empty;  29  }  30  }  31  }  32         public string Disk_Id  33  {  34             get
 35  {  36                 try
 37  {  38                     string hdId = string.Empty;  39                     ManagementClass hardDisk = new ManagementClass("win32_DiskDrive");  40                     ManagementObjectCollection hardDiskC = hardDisk.GetInstances();  41                     foreach (ManagementObject m in hardDiskC)  42  {  43                         hdId = m.Properties["Model"].Value.ToString();//WDC WD800BB-56JKC0
 44                         break;  45  }  46                     return hdId;  47  }  48                 catch (Exception)  49  {  50 
 51                     return string.Empty;  52  }  53  }  54  }  55         /// <summary>
 56         /// 网卡  57         /// </summary>
 58         public string NetworkCard  59  {  60             get
 61  {  62                 try
 63  {  64                     string MoAddress = string.Empty;  65                     ManagementClass networkAdapter = new ManagementClass("Win32_NetworkAdapterConfiguration");  66                     ManagementObjectCollection adapterC = networkAdapter.GetInstances();  67                     foreach (ManagementObject m in adapterC)  68  {  69                         if ((bool)m["IPEnabled"] == true)  70  {  71                             MoAddress = m["MacAddress"].ToString().Trim();  72  m.Dispose();  73  }  74  }  75                     return MoAddress;  76  }  77                 catch
 78  {  79                     return string.Empty;  80  }  81  }  82  }  83         /// <summary>
 84         /// 获取序列号,制造商,型号  85         /// </summary>
 86         public Tuple<string, string, string> SerialNumber_Manufacturer_Product  87  {  88             get
 89  {  90                 try
 91  {  92                     Tuple<string, string, string> tuple = null; new Tuple<string, string, string>(string.Empty,  93 string.Empty, string.Empty);  94                     ManagementObjectSearcher mos = new ManagementObjectSearcher("select * from Win32_baseboard");  95 
 96 
 97                     foreach (ManagementObject m in mos.Get())  98  {  99                         tuple = new Tuple<string, string, string>(m["SerialNumber"].ToString(), m["Manufacturer"].ToString(), 100  m["Product"].ToString()); 101  } 102                     return tuple; 103  } 104                 catch (Exception) 105  { 106 
107                     return null; 108  } 109  } 110  } 111         /// <summary>
112         /// 计算机名称 113         /// </summary>
114         public string HostName 115  { 116             get
117  { 118                 return System.Net.Dns.GetHostName(); 119  } 120  } 121     }
View Code

嵌入web页面编程

 1 <!DOCTYPE html>
 2 
 3 <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
 4 <head>
 5     <meta charset="utf-8" />
 6     <title></title>
 7     <script src="js/jquery.min.js"></script>
 8     <script>
 9 
10         //设置电脑信息
11         function callback(data) { 12  data = JSON.parse(data); 13  $("#msg").html(''); 14  $("#msg") 15  .append($("<li>cpu_id:" + data.cpu_id + "</li>")) 16  .append($("<li>disk_id:" + data.disk_id + "</li>")) 17  .append($("<li>host_name:" + data.host_name + "</li>")) 18  .append($("<li>networkcard:" + data.networkcard + "</li>")) 19  .append($("<li>serialNumber:" + data.serialNumber + "</li>")) 20  .append($("<li>manufacturer:" + data.manufacturer + "</li>")) 21  .append($("<li>product:" + data.product + "</li>")); 22  }; 23         function findComputerInfo() { 24             //调用后台C#FindComputerInfo,返回结果回调方法callback
25  googleBrower.FindComputerInfo(callback); 26  }; 27     </script>
28 </head>
29 <body>
30     <button onclick="findComputerInfo()">获取电脑信息</button>
31     <ul id="msg"></ul>
32 </body>
33 </html>
View Code

单击按钮,在Web页面上显示当前电脑信息json

winform窗体代码c#

 1 /// <summary>
 2     /// 主窗体  3     /// </summary>
 4     public partial class MainFrm : Form  5  {  6         private CefSharp.CefSettings _settings;  7  CefSharp.WinForms.ChromiumWebBrowser _webView;  8         public MainFrm()  9  { 10  InitializeComponent(); 11             _settings = new CefSharp.CefSettings(); 12  CefSharp.Cef.Initialize(_settings); 13             this.FormClosed += MainFrm_FormClosed; 14  } 15 
16         void MainFrm_FormClosed(object sender, FormClosedEventArgs e) 17  { 18             if (_webView != null) 19  { 20  _webView.Dispose(); 21  } 22  } 23 
24         private void MainFrm_Load(object sender, EventArgs e) 25  { 26             this.WindowState = FormWindowState.Maximized; 27             string url = "file:///E:/xxx/bin/x64/Debug/lenovo/test.html"; 28  LoadPage(url); 29             
30  } 31         /// <summary>
32         /// 加载页面 33         /// </summary>
34         /// <param name="url"></param>
35         private void LoadPage(string url) 36  { 37             if (_webView == null) 38  { 39                 _webView = new CefSharp.WinForms.ChromiumWebBrowser(url); 40                 _webView.Dock = DockStyle.Fill; 41                 _webView.LifeSpanHandler = new OpenPageSelf(); 42                 _webView.RegisterJsObject("googleBrower", new ScriptCallbackManager(), 43 new CefSharp.BindingOptions { CamelCaseJavascriptNames = false }); 44                 this.Controls.Add(_webView); 45  } 46             else
47  { 48  _webView.Load(url); 49  } 50  } 51     }
View Code
相关文章
相关标签/搜索