雄风 发表于 2012-12-9 13:51:46

C#如何取硬件标志

以下是代码片段:using System; using System.Runtime.InteropServices; using System.Management; namespace Hardware { ////// Hardware_Mac 的摘要说明。 ///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 ""; } }//endpublic 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 */}public struct ADAPTER_STATUS{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;}public struct NAME_BUFFER{public byte[] name;public byte name_num;public byte name_flags;}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;public byte[] ncb_callname;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;public byte[] ncb_reserve;public IntPtr ncb_event;}public struct LANA_ENUM{public byte length;public byte[] lana;}public struct ASTAT{public ADAPTER_STATUS adapt;public NAME_BUFFER[] NameBuff;}public class Win32API{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 {Ncb.ncb_command = (byte)NCBCONST.NCBRESET;Ncb.ncb_lana_num = lenum.lana;uRetCode = Win32API.Netbios(ref Ncb);if(uRetCode != (short)NCBCONST.NRC_GOODRET)return "";Ncb.ncb_command = (byte)NCBCONST.NCBASTAT;Ncb.ncb_lana_num = lenum.lana;Ncb.ncb_callname=(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,adapter.adapt.adapter_address,adapter.adapt.adapter_address,adapter.adapt.adapter_address,adapter.adapt.adapter_address,adapter.adapt.adapter_address);}}} catch {} return addr.Replace(' ', '0');}} }
页: [1]
查看完整版本: C#如何取硬件标志