基于C#編寫獲取硬件信息的工具類
更新時間:2023年11月29日 10:34:37 作者:rjcql
這篇文章主要為大家詳細介紹了如何利用C#編寫一個獲取硬件信息的簡單工具類,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下
寫在前面
通過性能計數(shù)器類 PerformanceCounter 傳入計數(shù)器名稱,獲取對應的系統(tǒng)指標數(shù)據(jù),以便進行分析和參考。
通過System.Management類庫中的ManagementObjectSearcher類實現(xiàn)對管理信息的查詢,比如:主板信息、內存信息、硬盤信息、顯卡信息、聲卡信息、網(wǎng)卡信息、生產商和生產日期等。
需引入一下命名空間:
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> /// 獲取剩余內存 /// </summary> public static float GetAvailableMemory() { // 創(chuàng)建內存占用字節(jié)數(shù)的性能計數(shù)器 var ramCounter = new PerformanceCounter("Memory", "Available MBytes"); if (ramCounter != null) { return ramCounter.NextValue(); } return 0; } /// <summary> /// 獲取當前進程CPU和內存使用情況 /// </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 內存信息 try { ManagementObjectSearcher myMemory = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMemory"); //定義內存總大小變量 double MemorySize = 0; foreach (ManagementObject obj in myMemory.Get()) { //將內存大小換算成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"); // 遍歷搜索結果 foreach (ManagementObject mo in mySoundcard.Get()) { // 獲取聲卡名稱 hdInfo.SoundcardName = mo.GetPropertyValue("Name").ToString(); } } catch (ManagementException ex) { hdInfo.SoundcardName = "未知"; } #endregion #region 網(wǎng)卡信息 try { // 獲取本地網(wǎng)絡接口信息 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 生產商和生產日期 try { //獲取生產商 ManagementObjectSearcher ManufacturerInfo = new ManagementObjectSearcher("select * from Win32_ComputerSystem"); foreach (ManagementObject obj in ManufacturerInfo.Get()) { hdInfo.ManufacturerName = obj["Manufacturer"].ToString(); } //獲取生產日期 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; } }
到此這篇關于基于C#編寫獲取硬件信息的工具類的文章就介紹到這了,更多相關C#獲取硬件信息內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
深入分析C#連接Oracle數(shù)據(jù)庫的連接字符串詳解
本篇文章是對C#連接Oracle數(shù)據(jù)庫的連接字符串進行了詳細的分析介紹,需要的朋友參考下2013-05-05C#實現(xiàn)十六進制與十進制相互轉換以及及不同進制表示
在C#中十進制和十六進制轉換非常簡單,下面這篇文章主要給大家介紹了關于C#實現(xiàn)十六進制與十進制相互轉換以及及不同進制表示的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2022-10-10