首先需添加對System.Management的引用。
using?System;using?System.Runtime.InteropServices;
using?System.Management;
namespace?Hardware
{
///?<summary>
///?HardwareInfo?的摘要說明。
///?</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');
}
}
}
使用方法舉例:
//獲取硬盤序列號Hardware.HardwareInfo?hardwareInfo?=?new?Hardware.HardwareInfo();
string?hardDiskID?=?hardwareInfo.GetHardDiskID();
System.Console.WriteLine(hardDiskID);
//獲取CPU序列號
string?cpuID?=?hardwareInfo.GetCpuID();
System.Console.WriteLine(cpuID);
//獲取硬盤序列號Hardware.HardwareInfo?hardwareInfo?=?new?Hardware.HardwareInfo();string?hardDiskID?=?hardwareInfo.GetHardDiskID();System.Console.WriteLine(hardDiskID);//獲取CPU序列號string?cpuID?=?hardwareInfo.GetCpuID();System.Console.WriteLine(cpuID);
轉自:CSDN《使用C#獲取CPU及硬盤序列號的源代碼》 --?songkexin