源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

C#如何取硬件标志

  • 时间:2021-06-24 15:06 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C#如何取硬件标志
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');    }  } }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部