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
相關文章
相關標籤/搜索