好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

C#获取机器码的方法详解(机器名,CPU编号,硬盘编号,网卡mac等)

本文实例讲述了C#获取机器码的方法。分享给大家供大家参考,具体如下:

?

using System.Runtime.InteropServices;

using System.Management;

using System;

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);

   }

   //取网卡mac

   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' );

   }

}

希望本文所述对大家C#程序设计有所帮助。

dy("nrwz");

查看更多关于C#获取机器码的方法详解(机器名,CPU编号,硬盘编号,网卡mac等)的详细内容...

  阅读:53次