基于C#編寫獲取硬件信息的工具類
寫在前面
通過性能計(jì)數(shù)器類 PerformanceCounter 傳入計(jì)數(shù)器名稱,獲取對(duì)應(yīng)的系統(tǒng)指標(biāo)數(shù)據(jù),以便進(jìn)行分析和參考。
通過System.Management類庫中的ManagementObjectSearcher類實(shí)現(xiàn)對(duì)管理信息的查詢,比如:主板信息、內(nèi)存信息、硬盤信息、顯卡信息、聲卡信息、網(wǎng)卡信息、生產(chǎn)商和生產(chǎn)日期等。
需引入一下命名空間:
using System.Diagnostics; using System.Management; using System.Net.NetworkInformation; using System.Text.Json;
代碼實(shí)現(xiàn)
public class DeviceInfoHelper
{
/// <summary>
/// 獲取CPU利用率
/// </summary>
public static float GetCpuStatus()
{
// 創(chuàng)建對(duì) CPU 占用百分比的性能計(jì)數(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ù)的性能計(jì)數(shù)器
var ramCounter = new PerformanceCounter("Memory", "Available MBytes");
if (ramCounter != null)
{
return ramCounter.NextValue();
}
return 0;
}
/// <summary>
/// 獲取當(dāng)前進(jìn)程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
{
//獲取本機(jī)所有硬盤信息
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搜索對(duì)象
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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#實(shí)現(xiàn)簡(jiǎn)單的天氣預(yù)報(bào)示例代碼
這篇文章主要介紹了C#實(shí)現(xiàn)簡(jiǎn)單的天氣預(yù)報(bào)示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
深入分析C#連接Oracle數(shù)據(jù)庫的連接字符串詳解
本篇文章是對(duì)C#連接Oracle數(shù)據(jù)庫的連接字符串進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
C#實(shí)現(xiàn)十六進(jìn)制與十進(jìn)制相互轉(zhuǎn)換以及及不同進(jìn)制表示
在C#中十進(jìn)制和十六進(jìn)制轉(zhuǎn)換非常簡(jiǎn)單,下面這篇文章主要給大家介紹了關(guān)于C#實(shí)現(xiàn)十六進(jìn)制與十進(jìn)制相互轉(zhuǎn)換以及及不同進(jìn)制表示的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10
C# GetMethod方法的應(yīng)用實(shí)例講解
GetMethod 是獲取當(dāng)前 Type 的特定方法,具有多個(gè)重載, GetMethod 即使用指定的綁定約束搜索指定方法,本文給大家介紹了C# GetMethod方法的應(yīng)用實(shí)例,需要的朋友可以參考下2024-04-04
C#檢測(cè)移動(dòng)硬盤并獲取移動(dòng)硬盤盤符的方法
這篇文章主要介紹了利用C#檢測(cè)移動(dòng)硬盤并獲取移動(dòng)硬盤盤符2017-12-12
C#面向?qū)ο笤O(shè)計(jì)原則之組合/聚合復(fù)用原則
這篇文章介紹了C#面向?qū)ο笤O(shè)計(jì)原則之組合/聚合復(fù)用原則,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03

