C#获取电脑硬件信息(CPU ID、主板ID、硬盘ID、BIOS编号)
最近學(xué)習(xí)過(guò)程中,想到提取系統(tǒng)硬件信息做一些驗(yàn)證,故而對(duì)網(wǎng)上提到的利用.NET System.Management類(lèi)獲取硬件信息做了進(jìn)一步的學(xué)習(xí)、驗(yàn)證。驗(yàn)證是分別在4臺(tái)電腦,XP SP3系統(tǒng)中進(jìn)行,特將驗(yàn)證過(guò)程記錄于此。
??? 說(shuō)明:
電腦1(聯(lián)想品牌電腦);
電腦2(HP品牌電腦);
電腦3(聯(lián)想品牌電腦);
電腦4(兼容機(jī));
- 獲取CPU編號(hào):
ManagementObjectCollection moc = mc.GetInstances();??
string strID = null ;????
foreach( ManagementObject mo in moc )????
{????
?strID = mo.Properties["ProcessorId"].Value.ToString();??
?break;???
}??????????????
textBox1.Text +=? "CPU ID:" + strID;?
?
???? 返回結(jié)果:
??????? 電腦1:CPU ID:BFEBFBFF00000F27
??????? 電腦2:CPU ID:BFEBFBFF00000F27
??????? 電腦3:CPU ID:BFEBFBFF00000F29
??????? 電腦4:CPU ID:BFEBFBFF00000F29
- 獲取主板編號(hào):
ManagementObjectCollection moc = mc.GetInstances();??
string strID = null ;????
foreach( ManagementObject mo in moc )????
{????
?strID = mo.Properties["SerialNumber"].Value.ToString();??
?break;???
}??????????????
textBox1.Text +=? "主板 ID:" + strID;?
?
?
????? 返回結(jié)果:
??????? 電腦1:主板 ID:
??????? 電腦2:主板 ID:CN24401483
??????? 電腦3:主板 ID:AZF241001101
??????? 電腦4:主板 ID:?
?
- 獲取硬盤(pán)編號(hào):
ManagementClass mc = new ManagementClass("Win32_PhysicalMedia");??
//網(wǎng)上有提到,用Win32_DiskDrive,但是用Win32_DiskDrive獲得的硬盤(pán)信息中并不包含SerialNumber屬性。???
ManagementObjectCollection moc = mc.GetInstances();??
string strID = null ;????
foreach( ManagementObject mo in moc )????
{????
?strID = mo.Properties["SerialNumber"].Value.ToString();??
?break;???
}??????????????
textBox1.Text +=? "硬盤(pán) ID:" + strID;??
??????????? ManagementClass mc = new ManagementClass("Win32_PhysicalMedia");
??????????? //網(wǎng)上有提到,用Win32_DiskDrive,但是用Win32_DiskDrive獲得的硬盤(pán)信息中并不包含SerialNumber屬性。
??????????? ManagementObjectCollection moc = mc.GetInstances();
??????????? string strID = null ;??
??????????? foreach( ManagementObject mo in moc )??
??????????? {??
???????????? strID = mo.Properties["SerialNumber"].Value.ToString();
???????????? break;?
??????????? }????????????
??????????? textBox1.Text +=? "硬盤(pán) ID:" + strID;
?
?
?
?
????? 返回結(jié)果:
??????? 電腦1:硬盤(pán) ID:4833395344463658202020202020202020202020?
??????? 電腦2:硬盤(pán) ID:WD-WMAJD1092385
??????? 電腦3:硬盤(pán) ID:4a353756354d5939202020202020202020202020
??????? 電腦4:硬盤(pán) ID:0637J2FW508014
- 獲取BIOS編號(hào):
ManagementClass mc = new ManagementClass("Win32_BIOS");??
ManagementObjectCollection moc = mc.GetInstances();??
string strID = null ;????
foreach( ManagementObject mo in moc )????
{????
?strID = mo.Properties["SerialNumber"].Value.ToString();??
?break;???
}??????????????
textBox1.Text +=? "BIOS ID:" + strID;?
?
??
?
???? 返回結(jié)果:
??????? 電腦1:BIOS ID:??
??????? 電腦2:BIOS ID:CN24401483
??????? 電腦3:BIOS ID:
??????? 電腦4:BIOS ID:
?
?
?
??? 總結(jié):
??? 由以上各步看出,通過(guò)Win32_Processor獲取CPUID不正確,或者說(shuō)Win32_Processor字段就不包含CPU編號(hào)信息。
??? 通過(guò)Win32_BaseBoard獲取主板信息,但不是所有的主板都有編號(hào),或者說(shuō)不是能獲取所有系統(tǒng)主板的編號(hào)。
??? 通過(guò)Win32_PhysicalMedia獲取硬盤(pán)編號(hào)應(yīng)該沒(méi)有問(wèn)題。但網(wǎng)上說(shuō)可以通過(guò)Win32_DiskDrive獲取,其實(shí)所得信息根本不包含SerialNumber。
??? 通過(guò)Win32_BIOS獲取BIOS信息,基本和獲取主板信息差不多。就是說(shuō):不是所有的主板BIOS信息都有編號(hào)。
?
??? 另外,可以將通過(guò)以上各字段所得信息輸出,逐個(gè)查看所有信息 屬性和對(duì)應(yīng)的值。代碼如下:
ManagementClass mc = new ManagementClass("Win32_Processor");??
ManagementObjectCollection moc = mc.GetInstances();???
foreach( ManagementObject mo in moc )????
{????
?textBox1.Text += "/r/n============CUP信息===========";??
?foreach (PropertyData pd in mo.Properties)??
?{??
???? textBox1.Text += "/r/n" + pd.Name + "/t";??
???? if (pd.Value != null)??
???? {??
???????? textBox1.Text += pd.Value.ToString();??
???? }??
?}??
?textBox1.Text += "/r/n/r/n=======================";??
}???
??????????? ManagementClass mc = new ManagementClass("Win32_Processor");
??????????? ManagementObjectCollection moc = mc.GetInstances();?
??????????? foreach( ManagementObject mo in moc )??
??????????? {??
???????????? textBox1.Text += "/r/n============CUP信息===========";
???????????? foreach (PropertyData pd in mo.Properties)
???????????? {
???????????????? textBox1.Text += "/r/n" + pd.Name + "/t";
???????????????? if (pd.Value != null)
???????????????? {
???????????????????? textBox1.Text += pd.Value.ToString();
???????????????? }
???????????? }
???????????? textBox1.Text += "/r/n/r/n=======================";
??????????? }
?
?
?
?===============================================
首先要添加對(duì)System.Management.dll的引用
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using System.Data.SqlClient; using System.Runtime.InteropServices; using System.Security.Cryptography; using Microsoft.Win32; using System.Management; using System.IO; namespace 哈哈 { ? ? class DataOperate ? ? { ? ? ? ? private SqlConnection conn = null; ? ? ? ? public DataOperate(string connStr) ? ? ? ? { ? ? ? ? ? ? conn = new SqlConnection(); ? ? ? ? ? ? conn.ConnectionString = connStr; ? ? ? ? } ? ? ? ? private void ColseConnnection() ? ? ? ? { ? ? ? ? ? ? if (conn.State == ConnectionState.Open) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? conn.Close(); ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? private void OpenConnection() ? ? ? ? { ? ? ? ? ? ? if (conn.State == ConnectionState.Closed) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? conn.Open(); ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? /// <summary> ? ? ? ? /// 這里是獲取cpu的id ? ? ? ? /// </summary> ? ? ? ? /// <returns></returns> ? ? ? ? public string GetProcessID() ? ? ? ? { ? ? ? ? ? ? try ??????????? { ? ? ? ? ? ? ? ? string str = string.Empty; ? ? ? ? ? ? ? ? ManagementClass mcCpu = new ManagementClass("win32_Processor"); ? ? ? ? ? ? ? ? ManagementObjectCollection mocCpu = mcCpu.GetInstances(); ? ? ? ? ? ? ? ? foreach (ManagementObject m in mocCpu) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? str = m["Processorid"].ToString().Trim().Substring(0, 8);//BFEBFBFF00000F65 ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? return str; ? ? ? ? ? ? } ? ? ? ? ? ? catch (Exception ex) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? return "likeshan"; ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? /// <summary> ? ? ? ? /// 獲取硬盤(pán)id ? ? ? ? /// </summary> ? ? ? ? /// <returns></returns> ? ? ? ? public string GetHardDiskID() ? ? ? ? { ? ? ? ? ? ? try ? ? ? ? ? ? { ? ? ? ? ? ? ? ? string hdId = string.Empty; ? ? ? ? ? ? ? ? ManagementClass hardDisk = new ManagementClass("win32_DiskDrive"); ? ? ? ? ? ? ? ? ManagementObjectCollection hardDiskC = hardDisk.GetInstances(); ? ? ? ? ? ? ? ? foreach (ManagementObject m in hardDiskC) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? //hdId = m["Model"].ToString().Trim(); ? ? ? ? ? ? ? ? ? ? hdId = m.Properties["Model"].Value.ToString();//WDC WD800BB-56JKC0 ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? return hdId; ? ? ? ? ? ? } ? ? ? ? ? ? catch ? ? ? ? ? ? { ? ? ? ? ? ? ? ? return "likeshan"; ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? /// <summary> ? ? ? ? /// 獲取網(wǎng)卡地址 ? ? ? ? /// </summary> ? ? ? ? /// <returns></returns> ? ? ? ? public string GetNetwordAdapter() ? ? ? ? { ? ? ? ? ? ? try ? ? ? ? ? ? { ? ? ? ? ? ? ? ? string MoAddress = string.Empty; ? ? ? ? ? ? ? ? ManagementClass networkAdapter = new ManagementClass("Win32_NetworkAdapterConfiguration"); ? ? ? ? ? ? ? ? ManagementObjectCollection adapterC = networkAdapter.GetInstances(); ? ? ? ? ? ? ? ? foreach (ManagementObject m in adapterC) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? if ((bool)m["IPEnabled"] == true) ? ? ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? ? ? MoAddress = m["MacAddress"].ToString().Trim(); ? ? ? ? ? ? ? ? ? ? ? ? m.Dispose(); ? ? ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? return MoAddress; ? ? ? ? ? ? } ? ? ? ? ? ? catch ? ? ? ? ? ? { ? ? ? ? ? ? ? ? return "likeshan"; ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? public string GetBaseboard() ? ? ? ? { ? ? ? ? ? ? try ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ManagementObjectSearcher mos = new ManagementObjectSearcher("select * from Win32_baseboard"); ? ? ? ? ? ? ? ? string serNumber = string.Empty; ? ? ? ? ? ? ? ? string manufacturer = string.Empty; ? ? ? ? ? ? ? ? string product = string.Empty; ? ? ? ? ? ? ? ? ? foreach (ManagementObject m in mos.Get()) ? ? ? ? ? ? ? ? { ? ? ? ? ? ? ? ? ? ? serNumber = m["SerialNumber"].ToString();//序列號(hào) ? ? ? ? ? ? ? ? ? ? manufacturer = m["Manufacturer"].ToString();//制造商 ? ? ? ? ? ? ? ? ? ? product = m["Product"].ToString();//型號(hào) ? ? ? ? ? ? ? ? } ? ? ? ? ? ? ? ? return serNumber + " " + manufacturer + " " + product; ? ? ? ? ? ? } ? ? ? ? ? ? catch ? ? ? ? ? ? { ? ? ? ? ? ? ? ? return "likeshan"; ? ? ? ? ? ? } ? ? ? ? } ? ? ? ? /// <summary> ? ? ? ? /// 加密算法(利用到了cpuid) ? ? ? ? /// </summary> ? ? ? ? /// <param name="data">要加密的字符串</param> ? ? ? ? /// <returns></returns> ? ? ? ? public string Encode(string data) ? ? ? ? { ? ? ? ? ? ? byte[] akey = ASCIIEncoding.ASCII.GetBytes(GetProcessID()); ? ? ? ? ? ? byte[] aIV = ASCIIEncoding.ASCII.GetBytes(GetProcessID()); ? ? ? ? ? ? using (DESCryptoServiceProvider CP = new DESCryptoServiceProvider()) ? ? ? ? ? ? { ? ? ? ? ? ? ? ? MemoryStream ms = new MemoryStream(); ? ? ? ? ? ? ? ? CryptoStream cs = new CryptoStream(ms, CP.CreateEncryptor(akey, aIV), CryptoStreamMode.Write); ? ? ? ? ? ? ? ? StreamWriter sw = new StreamWriter(cs); ? ? ? ? ? ? ? ? sw.Write(data); ? ? ? ? ? ? ? ? sw.Flush(); ? ? ? ? ? ? ? ? cs.FlushFinalBlock(); ? ? ? ? ? ? ? ? sw.Flush(); ? ? ? ? ? ? ? ? return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length); ? ? ? ? ? ? } ??????? } ? ? ? ? /// <summary> ? ? ? ? /// 加密算法(利用cpuid) ? ? ? ? /// </summary> ? ? ? ? /// <param name="data">需要解密的字符串</param> ? ? ? ? /// <returns></returns> ? ? ? ? public string Decode(string data) ? ? ? ? { ? ? ? ? ? ? byte[] akey = ASCIIEncoding.ASCII.GetBytes(GetProcessID()); ? ? ? ? ? ? byte[] aIV = ASCIIEncoding.ASCII.GetBytes(GetProcessID()); ? ? ? ? ? ? byte[] Enc = null; ? ? ? ? ? ? try ? ? ? ? ? ? { ? ? ? ? ? ? ? ? Enc = Convert.FromBase64String(data); ? ? ? ? ? ? } ? ? ? ? ? ? catch ? ? ? ? ? ? { ? ? ? ? ? ? ? ? return null; ? ? ? ? ? ? } ? ? ? ? ? ? ? DESCryptoServiceProvider cp = new DESCryptoServiceProvider(); ? ? ? ? ? ? MemoryStream ms=new MemoryStream(Enc); ? ? ? ? ? ? CryptoStream cs = new CryptoStream(ms, cp.CreateDecryptor(akey, aIV), CryptoStreamMode.Read); ? ? ? ? ? ? StreamReader reader = new StreamReader(cs); ? ? ? ? ? ? return reader.ReadToEnd(); ? ? ? ? } ? ? } }?
?==============================================
?
首先需添加對(duì)System.Management的引用。
using System.Runtime.InteropServices;???
using System.Management;???
??
namespace Hardware???
{???
??? /// <summary>????
??? /// HardwareInfo 的摘要說(shuō)明。????
??? /// </summary>????
??? public class HardwareInfo???
??? {???
??????? //取機(jī)器名?????
??????? public string GetHostName()???
??????? {???
??????????? return System.Net.Dns.GetHostName();???
??????? }???
??????? //取CPU編號(hào)????
??????? 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????
??
??????? //取第一塊硬盤(pán)編號(hào)????
??????? 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');???
??????? }???
??? }???
}??
?
?
使用方法舉例:
//獲取硬盤(pán)序列號(hào)????Hardware.HardwareInfo hardwareInfo = new Hardware.HardwareInfo();???string hardDiskID = hardwareInfo.GetHardDiskID();???
System.Console.WriteLine(hardDiskID);???
??
//獲取CPU序列號(hào)????
string cpuID = hardwareInfo.GetCpuID();???
System.Console.WriteLine(cpuID);???
//獲取硬盤(pán)序列號(hào)Hardware.HardwareInfo hardwareInfo = new Hardware.HardwareInfo();string hardDiskID = hardwareInfo.GetHardDiskID();System.Console.WriteLine(hardDiskID);//獲取CPU序列號(hào)string cpuID = hardwareInfo.GetCpuID();System.Console.WriteLine(cpuID);? ?
?
==========
?引用樓主的代碼:
//定義DLL文件名,此文件路徑要加到系統(tǒng)Path中?????????
private const string _fileDll = @"CPUID_Util.dll";???
//GetCPUID是 dll里面的一個(gè)方法????????
? private const string _FountionName = @"GetCPUID";????????
? [DllImport(_fileDll, EntryPoint = _FountionName, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]?????????
//C#中的申明?????????
public static extern string? GetCPUID(string id);??
?回復(fù)
?? //聲明一個(gè)stringBuilder類(lèi)型字符串??
StringBuilder strcpu=new StringBuilder();???
//將strcpu帶入函數(shù)中????????
GetCPUID(strcpu);?
//此時(shí)的strcpu已經(jīng)是cpuid了?? Console.writeLine(strcpu);
?
?
==================================
?
多核系統(tǒng)中每個(gè)處理器的ID是不同的,在哪個(gè)處理器上執(zhí)行得到的就是哪個(gè)處理器的ID,獲取ID之前可以用SetThreadAffinityMask指定在哪個(gè)處理器上執(zhí)行,這樣才能確保每次得到相同的結(jié)果。
總結(jié)
以上是生活随笔為你收集整理的C#获取电脑硬件信息(CPU ID、主板ID、硬盘ID、BIOS编号)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Matlab非线性拟合函数——nlinf
- 下一篇: 句柄(handle)是什么?