在.NET的项目中,有时候需要获取计算机的硬件的相关信息,在C#语言中需要利用ManagementClass这个类来进行相关操作。
ManagementClass类:对表示一个通用信息模型
(CIM) 管理类。 管理类是 WMI 类,如 Win32_LogicalDisk,该类型可表示一个磁盘驱动器,并
Win32_Process,它表示的进程 Notepad.exe 等。 此类的成员可以访问 WMI 数据,使用一个特定的 WMI
类路径。
1.GetInstances():此方法存在四个重载
2.Get():
3.GetSubclasses():此方法存在四个重载版本
C#
提供了ManagementClass类来获取本机的一些基本信息,比如CPU的个数,CPU的频率,网卡的MAC,内存的大小,硬盘的大小等。
//-----------------------
// @Author GarFey
// @date 20190612
// @version 1.0
//-----------------------
using System;
using
System.Management;
using
System.Windows.Forms;
namespace
GetPCInfo
{
public partial class Form1 : Form
{
public
Form1()
{
InitializeComponent();
}
private
void button1_Click(object sender, EventArgs e)
{
this.macPathtextBox.Text =
GetMACString();
this.cpuCounttextBox.Text =
GetCpuCount().ToString();
string[] cpuhz =
GetCpuMHZ();
foreach( string hz in
cpuhz)
{
this.cpuMHZtextBox.Text += hz+"\n";
}
this.diskSizetextBox.Text =
GetSizeOfDisk();
this.MemorySizetextBox.Text =
GetSizeOfMemery();
this.cpuIdtextBox.Text =
GetCpuid();
this.diskSerialNumbertextBox.Text =
GetDiskSerialNumber();
this.networkAddresstextBox.Text = GetMacAddress();
this.IpAddresstextBox.Text =
GetIpAddress();
this.userNametextBox.Text =
GetUserName();
this.pcNametextBox.Text =
GetComputerName();
this.sysTypetextBox.Text =
GetSystemType();
this.physicalMemorytextBox.Text = GetPhysicalMemory();
this.videoPnpidtextBox.Text =
GetVideoPnpid();
this.soundPnpidtextBox.Text =
GetSoundPnpid();
this.cpuVersiontextBox.Text =
GetCpuVersion();
this.cpuNametextBox.Text =
GetCpuName();
this.cpuManufacturertextBox.Text =
GetCpuManufacturer();
this.boardManufacturertextBox.Text =
GetBoardManufacturer();
this.boardIdtextBox.Text =
GetBoardId();
this.boardTypetextBox.Text =
GetBoardType();
}
///
///
获取本机的MAC地址
///
///
private
string GetMACString()
{
ManagementClass mAdapter =
new
ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection mo
= mAdapter.GetInstances();
foreach (ManagementBaseObject
m in mo)
{
if ((bool)m["IpEnabled"] == true)
{
return
m["MacAddress"].ToString();
}
}
mo.Dispose();
return "";//
null;
}
///
///
获取CPU的个数
///
///
private
int GetCpuCount()
{
try
{
using (ManagementClass mCpu = new
ManagementClass("Win32_Processor"))
{
ManagementObjectCollection cpus = mCpu.GetInstances();
return
cpus.Count;
}
}
catch
{
}
return -1;
}
///
///
获取CPU的频率 这里之所以使用string类型的数组,主要是因为cpu的多核
///
///
private
string[] GetCpuMHZ()
{
ManagementClass mc = new
ManagementClass("Win32_Processor");
ManagementObjectCollection
cpus = mc.GetInstances();
string[] mHz = new
string[cpus.Count];
int c = 0;
ManagementObjectSearcher
mySearch = new ManagementObjectSearcher("select * from
Win32_Processor");
foreach (ManagementObject mo
in mySearch.Get())
{
mHz[c] =
mo.Properties["CurrentClockSpeed"].Value.ToString();
c++;
}
mc.Dispose();
mySearch.Dispose();
return mHz;
}
///
///
获取硬盘的大小
///
///
private
string GetSizeOfDisk()
{
ManagementClass mc = new
ManagementClass("Win32_DiskDrive");
ManagementObjectCollection
moj = mc.GetInstances();
foreach (ManagementObject m
in moj)
{
return
m.Properties["Size"].Value.ToString();
}
return "-1";
}
///
///
获取内存的大小
///
///
private
string GetSizeOfMemery()
{
ManagementClass mc = new
ManagementClass("Win32_OperatingSystem");
ManagementObjectCollection
moc = mc.GetInstances();
double sizeAll =
0.0;
foreach (ManagementObject m
in moc)
{
if (m.Properties["TotalVisibleMemorySize"].Value
!= null)
{
sizeAll +=
Convert.ToDouble(m.Properties["TotalVisibleMemorySize"].Value.ToString());
}
}
mc = null;
moc.Dispose();
return
sizeAll.ToString();
}
///
///
获得CPU编号
///
///
public
string GetCpuid()
{
var cpuid =
string.Empty;
var mc = new
ManagementClass("Win32_Processor");
var moc =
mc.GetInstances();
foreach (var o in
moc)
{
var mo = (ManagementObject)o;
cpuid =
mo.Properties["ProcessorId"].Value.ToString();
}
return cpuid;
}
///
///
获取硬盘序列号
///
///
public
string GetDiskSerialNumber()
{
//这种模式在插入一个U盘后可能会有不同的结果,如插入我的手机时
var hDid =
string.Empty;
var mc = new
ManagementClass("Win32_DiskDrive");
var moc =
mc.GetInstances();
foreach (var o in
moc)
{
var mo = (ManagementObject)o;
hDid =
(string)mo.Properties["Model"].Value;
//这名话解决有多个物理盘时产生的问题,只取第一个物理硬盘
break;
}
return hDid;
}
///
///
获取网卡硬件地址
///
///
public
string GetMacAddress()
{
var mac = "";
var mc = new
ManagementClass("Win32_NetworkAdapterConfiguration");
var moc =
mc.GetInstances();
foreach (var o in
moc)
{
var mo = (ManagementObject)o;
if (!(bool)mo["IPEnabled"])
continue;
mac = mo["MacAddress"].ToString();
break;
}
return mac;
}
///
///
获取IP地址
///
///
public
string GetIpAddress()
{
var st =
string.Empty;
var mc = new
ManagementClass("Win32_NetworkAdapterConfiguration");
var moc =
mc.GetInstances();
foreach (var o in
moc)
{
var mo = (ManagementObject)o;
if (!(bool)mo["IPEnabled"])
continue;
var ar =
(Array)(mo.Properties["IpAddress"].Value);
st = ar.GetValue(0).ToString();
break;
}
return st;
}
///
///
操作系统的登录用户名
///
///
public
string GetUserName()
{
return
Environment.UserName;
}
///
///
获取计算机名
///
///
public
string GetComputerName()
{
return
Environment.MachineName;
}
///
///
操作系统类型
///
///
public
string GetSystemType()
{
var st =
string.Empty;
var mc = new
ManagementClass("Win32_ComputerSystem");
var moc =
mc.GetInstances();
foreach (var o in
moc)
{
var mo = (ManagementObject)o;
st = mo["SystemType"].ToString();
}
return st;
}
///
///
物理内存
///
///
public
string GetPhysicalMemory()
{
var st =
string.Empty;
var mc = new
ManagementClass("Win32_ComputerSystem");
var moc =
mc.GetInstances();
foreach (var o in
moc)
{
var mo = (ManagementObject)o;
st =
mo["TotalPhysicalMemory"].ToString();
}
return st;
}
///
///
显卡PNPDeviceID
///
///
public
string GetVideoPnpid()
{
var st = "";
var mos = new
ManagementObjectSearcher("Select * from
Win32_VideoController");
foreach (var o in
mos.Get())
{
var mo = (ManagementObject)o;
st = mo["PNPDeviceID"].ToString();
}
return st;
}
///
///
声卡PNPDeviceID
///
///
public
string GetSoundPnpid()
{
var st =
string.Empty;
var mos = new
ManagementObjectSearcher("Select * from
Win32_SoundDevice");
foreach (var o in
mos.Get())
{
var mo = (ManagementObject)o;
st = mo["PNPDeviceID"].ToString();
}
return st;
}
///
///
CPU版本信息
///
///
public
string GetCpuVersion()
{
var st =
string.Empty;
var mos = new
ManagementObjectSearcher("Select * from
Win32_Processor");
foreach (var o in
mos.Get())
{
var mo = (ManagementObject)o;
st = mo["Version"].ToString();
}
return st;
}
///
///
CPU名称信息
///
///
public
string GetCpuName()
{
var st =
string.Empty;
var driveId = new
ManagementObjectSearcher("Select * from
Win32_Processor");
foreach (var o in
driveId.Get())
{
var mo = (ManagementObject)o;
st = mo["Name"].ToString();
}
return st;
}
///
///
CPU制造厂商
///
///
public
string GetCpuManufacturer()
{
var st =
string.Empty;
var mos = new
ManagementObjectSearcher("Select * from
Win32_Processor");
foreach (var o in
mos.Get())
{
var mo = (ManagementObject)o;
st = mo["Manufacturer"].ToString();
}
return st;
}
///
///
主板制造厂商
///
///
public
string GetBoardManufacturer()
{
var query = new
SelectQuery("Select * from Win32_BaseBoard");
var mos = new
ManagementObjectSearcher(query);
var data =
mos.Get().GetEnumerator();
data.MoveNext();
var board =
data.Current;
return
board.GetPropertyValue("Manufacturer").ToString();
}
///
///
主板编号
///
///
public
string GetBoardId()
{
var st =
string.Empty;
var mos = new
ManagementObjectSearcher("Select * from
Win32_BaseBoard");
foreach (var o in
mos.Get())
{
var mo = (ManagementObject)o;
st = mo["SerialNumber"].ToString();
}
return st;
}
///
///
主板型号
///
///
public
string GetBoardType()
{
var st =
string.Empty;
var mos = new
ManagementObjectSearcher("Select * from
Win32_BaseBoard");
foreach (var o in
mos.Get())
{
var mo = (ManagementObject)o;
st = mo["Product"].ToString();
}
return st;
}