C#如何读取硬件信息 用C#如何读取硬件信息,获得各个硬件的基本信息。如显卡的品牌、硬盘品牌等。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 WMI 获取硬件信息ManagementClass driveClass = new ManagementClass("Win32_DiskDrive");http://www.codeproject.com/KB/system/wmi.aspx 网上找的,希望对你有用using System;using System.Runtime.InteropServices;using System.Management;namespace Hardware{/// <summary>/// Hardware_Mac 的摘要说明。/// </summary>public class HardwareInfo{//取机器名 public string GetHostName(){return System.Net.Dns.GetHostName();}//取CPU编号public String GetCpuID(){try{ManagementClass mc = new ManagementClass("Win32_Processor");ManagementObjectCollection moc = mc.GetInstances();String strCpuID = null;foreach (ManagementObject mo in moc){strCpuID = mo.Properties["ProcessorId"].Value.ToString();break;}return strCpuID;}catch{return "";}}//end method//取第一块硬盘编号public String GetHardDiskID(){try{ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");String strHardDiskID = null;foreach (ManagementObject mo in searcher.Get()){strHardDiskID = mo["SerialNumber"].ToString().Trim();break;}return strHardDiskID;}catch{return "";}}//end public enum NCBCONST{NCBNAMSZ = 16, /* absolute length of a net name */MAX_LANA = 254, /* lana's in range 0 to MAX_LANA inclusive */NCBENUM = 0x37, /* NCB ENUMERATE LANA NUMBERS */NRC_GOODRET = 0x00, /* good return */NCBRESET = 0x32, /* NCB RESET */NCBASTAT = 0x33, /* NCB ADAPTER STATUS */NUM_NAMEBUF = 30, /* Number of NAME's BUFFER */}[StructLayout(LayoutKind.Sequential)]public struct ADAPTER_STATUS{[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]public byte[] adapter_address;public byte rev_major;public byte reserved0;public byte adapter_type;public byte rev_minor;public ushort duration;public ushort frmr_recv;public ushort frmr_xmit;public ushort iframe_recv_err;public ushort xmit_aborts;public uint xmit_success;public uint recv_success;public ushort iframe_xmit_err;public ushort recv_buff_unavail;public ushort t1_timeouts;public ushort ti_timeouts;public uint reserved1;public ushort free_ncbs;public ushort max_cfg_ncbs;public ushort max_ncbs;public ushort xmit_buf_unavail;public ushort max_dgram_size;public ushort pending_sess;public ushort max_cfg_sess;public ushort max_sess;public ushort max_sess_pkt_size;public ushort name_count;}[StructLayout(LayoutKind.Sequential)]public struct NAME_BUFFER{[MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.NCBNAMSZ)]public byte[] name;public byte name_num;public byte name_flags;}[StructLayout(LayoutKind.Sequential)]public struct NCB{public byte ncb_command;public byte ncb_retcode;public byte ncb_lsn;public byte ncb_num;public IntPtr ncb_buffer;public ushort ncb_length;[MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.NCBNAMSZ)]public byte[] ncb_callname;[MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.NCBNAMSZ)]public byte[] ncb_name;public byte ncb_rto;public byte ncb_sto;public IntPtr ncb_post;public byte ncb_lana_num;public byte ncb_cmd_cplt;[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]public byte[] ncb_reserve;public IntPtr ncb_event;}[StructLayout(LayoutKind.Sequential)]public struct LANA_ENUM{public byte length;[MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.MAX_LANA)]public byte[] lana;}[StructLayout(LayoutKind.Auto)]public struct ASTAT{public ADAPTER_STATUS adapt;[MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.NUM_NAMEBUF)]public NAME_BUFFER[] NameBuff;}public class Win32API{[DllImport("NETAPI32.DLL")]public static extern char Netbios(ref NCB ncb);}public string GetMacAddress(){string addr = "";try{int cb;ASTAT adapter;NCB Ncb = new NCB();char uRetCode;LANA_ENUM lenum;Ncb.ncb_command = (byte)NCBCONST.NCBENUM;cb = Marshal.SizeOf(typeof(LANA_ENUM));Ncb.ncb_buffer = Marshal.AllocHGlobal(cb);Ncb.ncb_length = (ushort)cb;uRetCode = Win32API.Netbios(ref Ncb);lenum = (LANA_ENUM)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(LANA_ENUM));Marshal.FreeHGlobal(Ncb.ncb_buffer);if (uRetCode != (short)NCBCONST.NRC_GOODRET)return "";for (int i = 0; i < lenum.length; i++){Ncb.ncb_command = (byte)NCBCONST.NCBRESET;Ncb.ncb_lana_num = lenum.lana[i];uRetCode = Win32API.Netbios(ref Ncb);if (uRetCode != (short)NCBCONST.NRC_GOODRET)return "";Ncb.ncb_command = (byte)NCBCONST.NCBASTAT;Ncb.ncb_lana_num = lenum.lana[i];Ncb.ncb_callname[0] = (byte)'*';cb = Marshal.SizeOf(typeof(ADAPTER_STATUS)) + Marshal.SizeOf(typeof(NAME_BUFFER)) * (int)NCBCONST.NUM_NAMEBUF;Ncb.ncb_buffer = Marshal.AllocHGlobal(cb);Ncb.ncb_length = (ushort)cb;uRetCode = Win32API.Netbios(ref Ncb);adapter.adapt = (ADAPTER_STATUS)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(ADAPTER_STATUS));Marshal.FreeHGlobal(Ncb.ncb_buffer);if (uRetCode == (short)NCBCONST.NRC_GOODRET){if (i > 0)addr += ":";addr = string.Format("{0,2:X}{1,2:X}{2,2:X}{3,2:X}{4,2:X}{5,2:X}",adapter.adapt.adapter_address[0],adapter.adapt.adapter_address[1],adapter.adapt.adapter_address[2],adapter.adapt.adapter_address[3],adapter.adapt.adapter_address[4],adapter.adapt.adapter_address[5]);}}}catch{ }return addr.Replace(' ', '0');}}} up up up jf 参考8楼的就可以了。我下面的代码可以获取显卡信息。 ManagementClass mc = new ManagementClass("Win32_VideoController"); ManagementObjectCollection moc = mc.GetInstances(); StringBuilder content = new StringBuilder("Video controller infomation:\r\n"); content.Append("----------\r\n"); content.Append(moc.Count.ToString() + " Video controller in your PC\r\n\r\n"); int index = 0; foreach (ManagementObject mo in moc) { content.Append("Video controller " + index.ToString() + " :\r\n"); foreach (PropertyData data in mo.Properties) { content.Append("\t" + data.Name + "\t:\t" + ((data.Value != null) ? (data.Value.ToString() + "\r\n") : "") + "\r\n"); } } RegistryKey Rkey = Registry.LocalMachine; richTextBox1.Text = ""; Rkey = Rkey.OpenSubKey("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0"); richTextBox1.Text += "处理器信息:\r\n" + Rkey.GetValue("ProcessorNameString").ToString().Replace(" ", ""); richTextBox1.Text += "\r\n计算机名:\r\n" + System.Windows.Forms.SystemInformation.ComputerName.ToString(); richTextBox1.Text += "\r\n用户系统中磁盘分区:\r\n"; for (int i = 0; i < Environment.GetLogicalDrives().Length; i++) { richTextBox1.Text += Environment.GetLogicalDrives()[i] + " "; } Rkey = Registry.LocalMachine; //GetOsVersion()//取得操作系统版本 //GetMemInfo();//取得内存信息 //GetDriverInfo();//取得驱动器信息 //GetCpuInfo();// MEMORYSTATUS1 vBuffer = new MEMORYSTATUS1();//实例化结构 GlobalMemoryStatus(ref vBuffer);//给此结构赋值 string useinfo = Convert.ToString(vBuffer.dwAvailPhys);//获得已用内存量 string allinfo = Convert.ToString(vBuffer.dwTotalPhys);//获得内存总量 //MessageBox.Show(useinfo + ":" + allinfo); int infoAll, infoUsed; infoAll = int.Parse(allinfo) / 1024/1024; infoUsed = int.Parse(useinfo) / 1024/1024; richTextBox1.Text += "\r\n已用内存容量:"+infoUsed.ToString() +"MB\r\n"+"系统内存总量:"+ infoAll.ToString()+"MB";这一段 WMI这东西很好玩的ManagementClass driveClass = new ManagementClass("SELECT * FROM Win32_Printer");不过就是太慢了 WMI API还有.net架构提供的对象等等。 Gridview中汉字显示为问号 问个C#问题 js replace(/????/g,"")的问题 一个小问题 顺便散分 固定DataGridView的列 事务问题 高分请教模板导出,数据导入的问题。 Excel相关问题 通过c#将oracle与sqlserver 互连的问题 如何把1格式化成01? C#异步调用中的begininvoke第一个参数callDuration到底有什么用? 泛型集合取固定值问题!
ManagementClass driveClass = new ManagementClass("Win32_DiskDrive");
http://www.codeproject.com/KB/system/wmi.aspx
using System;
using System.Runtime.InteropServices;
using System.Management;
namespace Hardware
{
/// <summary>
/// Hardware_Mac 的摘要说明。
/// </summary>
public class HardwareInfo
{
//取机器名
public string GetHostName()
{
return System.Net.Dns.GetHostName();
}
//取CPU编号
public String GetCpuID()
{
try
{
ManagementClass mc = new ManagementClass("Win32_Processor");
ManagementObjectCollection moc = mc.GetInstances();String strCpuID = null;
foreach (ManagementObject mo in moc)
{
strCpuID = mo.Properties["ProcessorId"].Value.ToString();
break;
}
return strCpuID;
}
catch
{
return "";
}
}//end method//取第一块硬盘编号
public String GetHardDiskID()
{
try
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");
String strHardDiskID = null;
foreach (ManagementObject mo in searcher.Get())
{
strHardDiskID = mo["SerialNumber"].ToString().Trim();
break;
}
return strHardDiskID;
}
catch
{
return "";
}
}//end
public enum NCBCONST
{
NCBNAMSZ = 16, /* absolute length of a net name */
MAX_LANA = 254, /* lana's in range 0 to MAX_LANA inclusive */
NCBENUM = 0x37, /* NCB ENUMERATE LANA NUMBERS */
NRC_GOODRET = 0x00, /* good return */
NCBRESET = 0x32, /* NCB RESET */
NCBASTAT = 0x33, /* NCB ADAPTER STATUS */
NUM_NAMEBUF = 30, /* Number of NAME's BUFFER */
}[StructLayout(LayoutKind.Sequential)]
public struct ADAPTER_STATUS
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
public byte[] adapter_address;
public byte rev_major;
public byte reserved0;
public byte adapter_type;
public byte rev_minor;
public ushort duration;
public ushort frmr_recv;
public ushort frmr_xmit;
public ushort iframe_recv_err;
public ushort xmit_aborts;
public uint xmit_success;
public uint recv_success;
public ushort iframe_xmit_err;
public ushort recv_buff_unavail;
public ushort t1_timeouts;
public ushort ti_timeouts;
public uint reserved1;
public ushort free_ncbs;
public ushort max_cfg_ncbs;
public ushort max_ncbs;
public ushort xmit_buf_unavail;
public ushort max_dgram_size;
public ushort pending_sess;
public ushort max_cfg_sess;
public ushort max_sess;
public ushort max_sess_pkt_size;
public ushort name_count;
}[StructLayout(LayoutKind.Sequential)]
public struct NAME_BUFFER
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.NCBNAMSZ)]
public byte[] name;
public byte name_num;
public byte name_flags;
}[StructLayout(LayoutKind.Sequential)]
public struct NCB
{
public byte ncb_command;
public byte ncb_retcode;
public byte ncb_lsn;
public byte ncb_num;
public IntPtr ncb_buffer;
public ushort ncb_length;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.NCBNAMSZ)]
public byte[] ncb_callname;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.NCBNAMSZ)]
public byte[] ncb_name;
public byte ncb_rto;
public byte ncb_sto;
public IntPtr ncb_post;
public byte ncb_lana_num;
public byte ncb_cmd_cplt;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
public byte[] ncb_reserve;
public IntPtr ncb_event;
}[StructLayout(LayoutKind.Sequential)]
public struct LANA_ENUM
{
public byte length;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.MAX_LANA)]
public byte[] lana;
}[StructLayout(LayoutKind.Auto)]
public struct ASTAT
{
public ADAPTER_STATUS adapt;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.NUM_NAMEBUF)]
public NAME_BUFFER[] NameBuff;
}
public class Win32API
{
[DllImport("NETAPI32.DLL")]
public static extern char Netbios(ref NCB ncb);
}
public string GetMacAddress()
{
string addr = "";
try
{
int cb;
ASTAT adapter;
NCB Ncb = new NCB();
char uRetCode;
LANA_ENUM lenum;Ncb.ncb_command = (byte)NCBCONST.NCBENUM;
cb = Marshal.SizeOf(typeof(LANA_ENUM));
Ncb.ncb_buffer = Marshal.AllocHGlobal(cb);
Ncb.ncb_length = (ushort)cb;
uRetCode = Win32API.Netbios(ref Ncb);
lenum = (LANA_ENUM)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(LANA_ENUM));
Marshal.FreeHGlobal(Ncb.ncb_buffer);
if (uRetCode != (short)NCBCONST.NRC_GOODRET)
return "";for (int i = 0; i < lenum.length; i++)
{
Ncb.ncb_command = (byte)NCBCONST.NCBRESET;
Ncb.ncb_lana_num = lenum.lana[i];
uRetCode = Win32API.Netbios(ref Ncb);
if (uRetCode != (short)NCBCONST.NRC_GOODRET)
return "";Ncb.ncb_command = (byte)NCBCONST.NCBASTAT;
Ncb.ncb_lana_num = lenum.lana[i];
Ncb.ncb_callname[0] = (byte)'*';
cb = Marshal.SizeOf(typeof(ADAPTER_STATUS)) + Marshal.SizeOf(typeof(NAME_BUFFER)) * (int)NCBCONST.NUM_NAMEBUF;
Ncb.ncb_buffer = Marshal.AllocHGlobal(cb);
Ncb.ncb_length = (ushort)cb;
uRetCode = Win32API.Netbios(ref Ncb);
adapter.adapt = (ADAPTER_STATUS)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(ADAPTER_STATUS));
Marshal.FreeHGlobal(Ncb.ncb_buffer);if (uRetCode == (short)NCBCONST.NRC_GOODRET)
{
if (i > 0)
addr += ":";
addr = string.Format("{0,2:X}{1,2:X}{2,2:X}{3,2:X}{4,2:X}{5,2:X}",
adapter.adapt.adapter_address[0],
adapter.adapt.adapter_address[1],
adapter.adapt.adapter_address[2],
adapter.adapt.adapter_address[3],
adapter.adapt.adapter_address[4],
adapter.adapt.adapter_address[5]);
}
}
}
catch
{ }
return addr.Replace(' ', '0');
}}
}
content.Append("----------\r\n"); content.Append(moc.Count.ToString() + " Video controller in your PC\r\n\r\n"); int index = 0; foreach (ManagementObject mo in moc)
{
content.Append("Video controller " + index.ToString() + " :\r\n"); foreach (PropertyData data in mo.Properties)
{
content.Append("\t" + data.Name + "\t:\t" + ((data.Value != null) ? (data.Value.ToString() + "\r\n") : "") + "\r\n");
}
}
richTextBox1.Text = "";
Rkey = Rkey.OpenSubKey("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0");
richTextBox1.Text += "处理器信息:\r\n" + Rkey.GetValue("ProcessorNameString").ToString().Replace(" ", "");
richTextBox1.Text += "\r\n计算机名:\r\n" + System.Windows.Forms.SystemInformation.ComputerName.ToString();
richTextBox1.Text += "\r\n用户系统中磁盘分区:\r\n";
for (int i = 0; i < Environment.GetLogicalDrives().Length; i++)
{
richTextBox1.Text += Environment.GetLogicalDrives()[i] + " ";
}
Rkey = Registry.LocalMachine;
//GetOsVersion()//取得操作系统版本
//GetMemInfo();//取得内存信息
//GetDriverInfo();//取得驱动器信息
//GetCpuInfo();//
MEMORYSTATUS1 vBuffer = new MEMORYSTATUS1();//实例化结构
GlobalMemoryStatus(ref vBuffer);//给此结构赋值
string useinfo = Convert.ToString(vBuffer.dwAvailPhys);//获得已用内存量
string allinfo = Convert.ToString(vBuffer.dwTotalPhys);//获得内存总量
//MessageBox.Show(useinfo + ":" + allinfo);
int infoAll, infoUsed;
infoAll = int.Parse(allinfo) / 1024/1024;
infoUsed = int.Parse(useinfo) / 1024/1024;
richTextBox1.Text += "\r\n已用内存容量:"+infoUsed.ToString() +"MB\r\n"+"系统内存总量:"+ infoAll.ToString()+"MB";这一段
这东西很好玩的ManagementClass driveClass = new ManagementClass("SELECT * FROM Win32_Printer");不过就是太慢了