前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >CefSharp中c#和JavaScript交互读取电脑信息

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

作者头像
心莱科技雪雁
发布于 2019-04-22 06:41:16
发布于 2019-04-22 06:41:16
5.3K00
代码可运行
举报
文章被收录于专栏:雪雁的专栏雪雁的专栏
运行总次数:0
代码可运行

介绍

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/// <summary>
    /// js c#回调类
    /// </summary>
    class ScriptCallbackManager
    {
        /// <summary>
        /// 查找电脑信息
        /// </summary>
        /// <param name="javascriptCallback"></param>
        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类为获取电脑信息的操作类

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/// <summary>
    /// 电脑信息类
    /// </summary>
    public class Computer
    {
        /// <summary>
        /// 查找cpu的id
        /// </summary>
        /// <returns></returns>
        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;
                }
            }
        }
        /// <summary>
        /// 网卡
        /// </summary>
        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;
                }
            }
        }
        /// <summary>
        /// 获取序列号,制造商,型号
        /// </summary>
        public Tuple<string, string, string> SerialNumber_Manufacturer_Product
        {
            get
            {
                try
                {
                    Tuple<string, string, string> tuple = null; new Tuple<string, string, string>(string.Empty, 
string.Empty, string.Empty);
                    ManagementObjectSearcher mos = new ManagementObjectSearcher("select * from Win32_baseboard");
                    foreach (ManagementObject m in mos.Get())
                    {
                        tuple = new Tuple<string, string, string>(m["SerialNumber"].ToString(), m["Manufacturer"].ToString(),
 m["Product"].ToString());
                    }
                    return tuple;
                }
                catch (Exception)
                {
                    return null;
                }
            }
        }
        /// <summary>
        /// 计算机名称
        /// </summary>
        public string HostName
        {
            get
            {
                return System.Net.Dns.GetHostName();
            }
        }
    }

嵌入web页面

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title></title>
    <script src="js/jquery.min.js"></script>
    <script>
        //设置电脑信息
        function callback(data) {
            data = JSON.parse(data);
            $("#msg").html('');
            $("#msg")
            .append($("<li>cpu_id:" + data.cpu_id + "</li>"))
            .append($("<li>disk_id:" + data.disk_id + "</li>"))
            .append($("<li>host_name:" + data.host_name + "</li>"))
            .append($("<li>networkcard:" + data.networkcard + "</li>"))
            .append($("<li>serialNumber:" + data.serialNumber + "</li>"))
            .append($("<li>manufacturer:" + data.manufacturer + "</li>"))
            .append($("<li>product:" + data.product + "</li>"));
        };
        function findComputerInfo() {
            //调用后台C#FindComputerInfo,返回结果回调方法callback
            googleBrower.FindComputerInfo(callback);
        };
    </script>
</head>
<body>
    <button onclick="findComputerInfo()">获取电脑信息</button>
    <ul id="msg"></ul>
</body>
</html>
单击按钮,在Web页面上显示当前电脑信息
winform窗体代码
/// <summary>
    /// 主窗体
    /// </summary>
    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);
        }
        /// <summary>
        /// 加载页面
        /// </summary>
        /// <param name="url"></param>
        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);
            }
        }
    }

本文转载于博客园

原文链接:

https://www.cnblogs.com/zengzhanping/p/10646892.html?tdsourcetag=s_pcqq_aiomsg

作者:无赖痞子

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 麦扣聊技术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C#获取机器信息(IPV4.IPV6.MAC.硬盘信息,机器厂商/型号)「建议收藏」
using System; using System.Collections.Specialized; using System.IO; using System.Management; using System.Net; using System.Net.Sockets; using System.Windows; using System.Windows.Input; using System.Windows.Media;
全栈程序员站长
2022/11/10
9690
C#获取机器信息(IPV4.IPV6.MAC.硬盘信息,机器厂商/型号)「建议收藏」
利用RSA加密实现的简易离线验证功能(C#,含代码)
许多软件都有正版验证功能,它们通常需要联网验证,验证的本质则是加密与解密,本文将使用RSA加密算法实现简易的离线验证功能
DearXuan
2022/01/19
5660
利用RSA加密实现的简易离线验证功能(C#,含代码)
C#获取机器码MachineCode
定义规则: 机器码 = CPU序列号 + 硬盘ID + 网卡硬件地址 public class MachineCode { static MachineCode machineCode; public static string GetMachineCodeString() { string machineCodeString = string.Empty; if (machineCode == null) {
皇上得了花柳病
2020/05/04
3.3K0
【2013年】开发常见问题回顾(一)
记录开发中遇到的和别人问的较多的问题.... IE10中LinkButton不可用     这应该是2013年初遇到的一个BUG,当使用Asp.Net开发Web Application时,页面使用LinkButton按钮;运行页面用IE10打开,点击LinkButton按钮出现如下图错误   没有直接弹出如下图错误,可以运行IE10开发人员工具(F12),在控制台中查看,也会输出 “__doPostBack”未定义 错误信息 image.png 解决方法及参考: 下载并在服务器上安装相应补丁程序即可,下载
Porschev
2018/01/16
1.9K0
【2013年】开发常见问题回顾(一)
ManagementClass类解析和C#如何获取硬件的相关信息
彭泽0902
2018/01/04
3.7K1
ManagementClass类解析和C#如何获取硬件的相关信息
WMI使用技巧集
WMI使用技巧集 很多的朋友对WMI可能见过但理解不深,我也是十分想了解关于WMI的知识,可一直找不运维
Java架构师必看
2021/03/22
8500
c# 获取电脑硬件信息通用查询类[测试通过]
C#获取电脑硬件信息通用类[Computer]代码展示和分析,简介如下: 1.项目中添加System.Management引用。 2.添加类Computer,把下面代码全选,复制,粘贴。 3.使用方法new Computer().GetComputerName()。 using System; using System.Management; // 添加System.Management引用 public class Computer { public string CpuID; pub
磊哥
2018/04/26
1.2K0
C# 获取计算机相关信息
1. 在'解决方案资源管理器' 窗口中->右击项目-> '添加' -> '引用' 弹出引用管理器
用户7053485
2020/03/19
1K0
c#生成注册码
using System; using System.Management; using System.Security.Cryptography; using System.IO; using System.Collections.Generic; using System.Text; namespace xingming_reg { class Program { static void Main(string[] args) {
用户8671053
2021/11/03
1K0
CefSharp请求资源拦截及自定义处理
在CefSharp中,我们不仅可以使用Chromium浏览器内核,还可以通过Cef暴露出来的各种Handler来实现我们自己的资源请求处理。
w4ngzhen
2023/10/18
1.4K0
CefSharp请求资源拦截及自定义处理
C#常用操作类库五(电脑操作类)
/// <summary>     /// Computer Information     /// </summary>     public class ComputerHelper     {         public string CpuID;         public string MacAddress;         public string DiskID;         public string IpAddress;         public string LoginUse
跟着阿笨一起玩NET
2018/09/18
8610
C# 获取内存和CPU信息的代码
获取cpu信息 using System.Collections; using System.Collections.Generic; using System.Management; using System.Text; namespace MergeSystem.Indexus.WinServiceCommon.SystemManagement { /// <summary> /// Represents the CPU scope information /// </summ
用户7705674
2021/11/02
2.5K0
CefSharp 中过滤图片 RequestHandler
具体内同参照 附录;将 OnBeforeResourceLoad方法替换成2中的内容,很简单;
全栈程序员站长
2022/11/04
9320
C#通过WMI的wind32 的API函数实现msinfo32的本地和远程计算机的系统日志查看功能
先不说如何实现,先来看看效果图: 读取远程的需要提供下远程的计算用户名和密码即可。 如何实现这个代码功能,请看如下代码部分: #region//获取日志文件 /// <summary>
逸鹏
2018/04/09
9750
C#通过WMI的wind32 的API函数实现msinfo32的本地和远程计算机的系统日志查看功能
WPF桌面端开发-获取系统版本,位数等信息
无论哪种方式获取系统版本,Win11获取到的都是Win10,但是版本号的方式可以通过构建号来判断Win11。
码客说
2023/07/11
6960
WPF桌面端开发-获取系统版本,位数等信息
【C#】C#获得计算机硬件信息和操作系统信息,ManagementObjectSearcher[通俗易懂]
前言: 我们在很多情况下想要获得计算机的硬件或操作系统的信息,比如获得CPU序列号给自己的软件添加机器码锁绑定指定电脑。又或者想要获得硬盘分区,声卡显卡等信息。
全栈程序员站长
2022/11/09
1.7K0
CefSharp中文帮助文档「建议收藏」
CefSharp是围绕Chromium嵌入式框架( Chromium Embedded Framework,CEF)的.Net包装器。CEF是一个基于Google Chromium项目的开源项目。与Chromium项目本身(主要专注于Google Chrome应用程序开发)不同,CEF专注于促进第三方应用程序中的嵌入式浏览器用例。 CEF基于多进程Chromium Content API,因此,当前仅存在Chromium的部分功能。例如,对扩展的支持是有限的,仅实现了一部分Extension API。
全栈程序员站长
2022/11/04
13.9K0
WPF/WinForm中加载网页的几种方式及如何加载Flash库(WebBrowser/CEF)
https://docs.microsoft.com/zh-cn/microsoft-edge/webview2/get-started/wpf
码客说
2022/06/12
4K0
WPF/WinForm中加载网页的几种方式及如何加载Flash库(WebBrowser/CEF)
JavaScript使用(笔记)
//当前点击的标签添加样式,同级别其他标签移除样式 $(this).addClass('hover').siblings().removeClass('hover'); //执行完改Ajax后执行下一步 同步 async:false //{%$argv(0)%}(公司写法)获取页面传入的id id="title_1" var type = "{%$argv(0)%}"; if (type != "") { $("#title_" + type + "").click(); } //默认点击第一个
小语雀网
2022/05/06
2.5K0
.NET混合开发解决方案11 WebView2加载的网页中JS调用C#方法
  在我的博客《.NET混合开发解决方案10 WebView2控件调用网页JS方法》中介绍了C#调用网页中定义的JavaScript方法以执行某种业务逻辑,同样WebView2控件中加载的网页中自定义的JavaScript方法中也可以调用C#方法。
张传宁IT讲堂
2022/05/11
11.1K1
.NET混合开发解决方案11 WebView2加载的网页中JS调用C#方法
推荐阅读
相关推荐
C#获取机器信息(IPV4.IPV6.MAC.硬盘信息,机器厂商/型号)「建议收藏」
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文