基于C#編寫獲取硬件信息的工具類
寫在前面
通過性能計數(shù)器類 PerformanceCounter 傳入計數(shù)器名稱,獲取對應(yīng)的系統(tǒng)指標數(shù)據(jù),以便進行分析和參考。
通過System.Management類庫中的ManagementObjectSearcher類實現(xiàn)對管理信息的查詢,比如:主板信息、內(nèi)存信息、硬盤信息、顯卡信息、聲卡信息、網(wǎng)卡信息、生產(chǎn)商和生產(chǎn)日期等。
需引入一下命名空間:
using System.Diagnostics; using System.Management; using System.Net.NetworkInformation; using System.Text.Json;
代碼實現(xiàn)
public class DeviceInfoHelper { /// <summary> /// 獲取CPU利用率 /// </summary> public static float GetCpuStatus() { // 創(chuàng)建對 CPU 占用百分比的性能計數(shù)器。 var cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total"); if (cpuCounter != null) { return cpuCounter.NextValue(); } return 0; } /// <summary> /// 獲取剩余內(nèi)存 /// </summary> public static float GetAvailableMemory() { // 創(chuàng)建內(nèi)存占用字節(jié)數(shù)的性能計數(shù)器 var ramCounter = new PerformanceCounter("Memory", "Available MBytes"); if (ramCounter != null) { return ramCounter.NextValue(); } return 0; } /// <summary> /// 獲取當(dāng)前進程CPU和內(nèi)存使用情況 /// </summary> public static Tuple<float, float> GetCurrentProcessorUsage() { var processName = Process.GetCurrentProcess().ProcessName; var theCPUCounter = new PerformanceCounter("Process", "% Processor Time", processName); var theMemCounter = new PerformanceCounter("Process", "Working Set", processName); return new Tuple<float, float>(theCPUCounter.NextValue(), theMemCounter.NextValue()); } /// <summary> /// 獲取硬件信息摘要 /// </summary> public static string GetHardwareSummary() { var hdInfo = new HardwardSummary { MainboardName = "未知", MemorySize = "未知", HarddiskSize = "未知", VideocardName = "未知", SoundcardName = "未知", NetworkcardName = "未知", ManufacturerName = "未知", ManufactureDate = "未知" }; #region 主板信息 try { ManagementObjectSearcher myMainboard = new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard"); foreach (ManagementObject board in myMainboard.Get()) { hdInfo.MainboardName = board["Product"].ToString(); } } catch (Exception ex) { hdInfo.MainboardName = "未知"; } #endregion #region 內(nèi)存信息 try { ManagementObjectSearcher myMemory = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMemory"); //定義內(nèi)存總大小變量 double MemorySize = 0; foreach (ManagementObject obj in myMemory.Get()) { //將內(nèi)存大小換算成G單位 MemorySize += Convert.ToDouble(obj["Capacity"]) / 1024 / 1024 / 1024; } hdInfo.MemorySize = MemorySize.ToString() + "G"; } catch (ManagementException e) { hdInfo.MemorySize = "未知"; } #endregion #region 硬盤信息 try { //獲取本機所有硬盤信息 ManagementObjectSearcher myHarddisk = new ManagementObjectSearcher("select * from Win32_DiskDrive"); foreach (ManagementObject drive in myHarddisk.Get()) { //獲取硬盤容量 var capacity = (Convert.ToDouble(drive["Size"]) / 1024 / 1024 / 1024).ToString("0.00") + "G"; //獲取硬盤類型 var mediaType = drive["MediaType"]; hdInfo.HarddiskSize = capacity.ToString() + "|" + mediaType.ToString(); } } catch (Exception ex) { hdInfo.HarddiskSize = "未知"; } #endregion #region 顯卡信息 try { ManagementObjectSearcher myVideoObject = new ManagementObjectSearcher("select * from Win32_VideoController"); foreach (ManagementObject obj in myVideoObject.Get()) { hdInfo.VideocardName = obj["Name"].ToString(); } } catch (ManagementException ex) { hdInfo.VideocardName = "未知"; } #endregion #region 聲卡信息 try { // 創(chuàng)建WMI搜索對象 ManagementObjectSearcher mySoundcard = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_SoundDevice"); // 遍歷搜索結(jié)果 foreach (ManagementObject mo in mySoundcard.Get()) { // 獲取聲卡名稱 hdInfo.SoundcardName = mo.GetPropertyValue("Name").ToString(); } } catch (ManagementException ex) { hdInfo.SoundcardName = "未知"; } #endregion #region 網(wǎng)卡信息 try { // 獲取本地網(wǎng)絡(luò)接口信息 NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces(); foreach (NetworkInterface adapter in nics) { // 如果是RJ45網(wǎng)卡 if (adapter.NetworkInterfaceType == NetworkInterfaceType.Ethernet) { string S1 = (string)adapter.Description; if (S1.Contains("PCI")) { hdInfo.NetworkcardName = S1; } } } } catch (ManagementException ex) { hdInfo.NetworkcardName = "未知"; } #endregion #region 生產(chǎn)商和生產(chǎn)日期 try { //獲取生產(chǎn)商 ManagementObjectSearcher ManufacturerInfo = new ManagementObjectSearcher("select * from Win32_ComputerSystem"); foreach (ManagementObject obj in ManufacturerInfo.Get()) { hdInfo.ManufacturerName = obj["Manufacturer"].ToString(); } //獲取生產(chǎn)日期 ConnectionOptions options = new ConnectionOptions(); ManagementScope scope = new ManagementScope("\\\\.\\root\\cimv2", options); ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_BIOS"); ManagementObjectSearcher BoisInfo = new ManagementObjectSearcher(scope, query); foreach (ManagementObject mo in BoisInfo.Get()) { string StrManufactureDate = mo["ReleaseDate"].ToString().Substring(0, 8); DateTime DT = DateTime.ParseExact(StrManufactureDate, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture); hdInfo.ManufactureDate = String.Format("{0:d}", DT); } } catch (Exception ex) { hdInfo.ManufacturerName = "未知"; hdInfo.ManufactureDate = "未知"; } #endregion return JsonSerializer.Serialize(hdInfo); } } public class HardwardSummary { public string MainboardName { get; set; } public string MemorySize { get; set; } public string HarddiskSize { get; set; } public string VideocardName { get; set; } public string SoundcardName { get; set; } public string NetworkcardName { get; set; } public string ManufacturerName { get; set; } public string ManufactureDate { get; set; } }
到此這篇關(guān)于基于C#編寫獲取硬件信息的工具類的文章就介紹到這了,更多相關(guān)C#獲取硬件信息內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
深入分析C#連接Oracle數(shù)據(jù)庫的連接字符串詳解
本篇文章是對C#連接Oracle數(shù)據(jù)庫的連接字符串進行了詳細的分析介紹,需要的朋友參考下2013-05-05C#實現(xiàn)十六進制與十進制相互轉(zhuǎn)換以及及不同進制表示
在C#中十進制和十六進制轉(zhuǎn)換非常簡單,下面這篇文章主要給大家介紹了關(guān)于C#實現(xiàn)十六進制與十進制相互轉(zhuǎn)換以及及不同進制表示的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2022-10-10C#面向?qū)ο笤O(shè)計原則之組合/聚合復(fù)用原則
這篇文章介紹了C#面向?qū)ο笤O(shè)計原則之組合/聚合復(fù)用原則,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-03-03