日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

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

發布時間:2023/12/4 C# 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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


/// <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類為獲取電腦信息的操作類


/// <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頁面


<!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 οnclick="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);

? ? ? ? ? ? }

? ? ? ? }

? ? }

.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com


總結

以上是生活随笔為你收集整理的CefSharp中c#和JavaScript交互读取电脑信息的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。