• 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的一些用例包括:

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

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

    前言

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

    简单实例

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

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

     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类为获取电脑信息的操作类

      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页面上显示当前电脑信息

    winform窗体代码

     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
  • 相关阅读:
    SQL Server 之 在与SQLServer建立连接时出现与网络相关的或特定于实例的错误的解决方法
    Exchange学习:EWS 通过流通知和拉取通知订阅Exchange新邮件提醒
    拓扑提供程序在端点TopologyClientTcpEndpoint (localhost) 上找不到microsoft exchange active directory拓扑服务的解决办法之一
    解决vs下载速度慢或者无法下载,无法下载.net sdk的解决办法
    记一个List转List<Object>的方法
    SqlServer数据库存入decimal类型数据注意事项
    如何在vs里面查看方法重载
    LeetCode 198. 打家劫舍 Java
    LeetCode面试题53
    LeetCode 1010. 总持续时间可被 60 整除的歌曲 Java
  • 原文地址:https://www.cnblogs.com/zengzhanping/p/10646892.html
Copyright © 2020-2023  润新知