找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 697|回复: 0

C#如何取硬件标志

[复制链接]
发表于 2012-12-9 13:51:46 | 显示全部楼层 |阅读模式
以下是代码片段: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["rocessorId"].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 {  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[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');  }  } }
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|要学吧论坛

GMT+8, 2025-10-18 20:17 , Processed in 0.061431 second(s), 27 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表