分享

使用C#获取CPU及硬盘序列号的源代码

 *我爱阳光* 2010-09-24
 

首先需添加对System.Management的引用。

  1. using System;
  2. using System.Runtime.InteropServices;
  3. using System.Management;
  4. namespace Hardware
  5. {
  6.     /// <summary>
  7.     /// HardwareInfo 的摘要说明。
  8.     /// </summary>
  9.     public class HardwareInfo
  10.     {
  11.         //取机器名 
  12.         public string GetHostName()
  13.         {
  14.             return System.Net.Dns.GetHostName();
  15.         }
  16.         //取CPU编号
  17.         public String GetCpuID()
  18.         {
  19.             try
  20.             {
  21.                 ManagementClass mc = new ManagementClass("Win32_Processor");
  22.                 ManagementObjectCollection moc = mc.GetInstances();
  23.                 String strCpuID = null;
  24.                 foreach (ManagementObject min moc)
  25.                 {
  26.                     strCpuID = mo.Properties["ProcessorId"].Value.ToString();
  27.                     break;
  28.                 }
  29.                 return strCpuID;
  30.             }
  31.             catch
  32.             {
  33.                 return "";
  34.             }
  35.         }//end method
  36.         //取第一块硬盘编号
  37.         public String GetHardDiskID()
  38.         {
  39.             try
  40.             {
  41.                 ManagementObjectSearcher searcher new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");
  42.                 String strHardDiskID = null;
  43.                 foreach (ManagementObject min searcher.Get())
  44.                 {
  45.                     strHardDiskID = mo["SerialNumber"].ToString().Trim();
  46.                     break;
  47.                 }
  48.                 return strHardDiskID;
  49.             }
  50.             catch
  51.             {
  52.                 return "";
  53.             }
  54.         }//end 
  55.         public enum NCBCONST
  56.         {
  57.             NCBNAMSZ = 16,      /* absolute length of a net name         */
  58.             MAX_LANA = 254,      /* lana's in range 0 to MAX_LANA inclusive   */
  59.             NCBENUM = 0x37,      /* NCB ENUMERATE LANA NUMBERS            */
  60.             NRC_GOODRET = 0x00,      /* good return                              */
  61.             NCBRESET = 0x32,      /* NCB RESET                        */
  62.             NCBASTAT = 0x33,      /* NCB ADAPTER STATUS                  */
  63.             NUM_NAMEBUF = 30,      /* Number of NAME's BUFFER               */
  64.         }
  65.         [StructLayout(LayoutKind.Sequential)]
  66.         public struct ADAPTER_STATUS
  67.         {
  68.             [MarshalAs(UnmanagedType.ByValArray, SizeConst = 6)]
  69.             public byte[] adapter_address;
  70.             public byte rev_major;
  71.             public byte reserved0;
  72.             public byte adapter_type;
  73.             public byte rev_minor;
  74.             public ushort duration;
  75.             public ushort frmr_recv;
  76.             public ushort frmr_xmit;
  77.             public ushort iframe_recv_err;
  78.             public ushort xmit_aborts;
  79.             public uint xmit_success;
  80.             public uint recv_success;
  81.             public ushort iframe_xmit_err;
  82.             public ushort recv_buff_unavail;
  83.             public ushort t1_timeouts;
  84.             public ushort ti_timeouts;
  85.             public uint reserved1;
  86.             public ushort free_ncbs;
  87.             public ushort max_cfg_ncbs;
  88.             public ushort max_ncbs;
  89.             public ushort xmit_buf_unavail;
  90.             public ushort max_dgram_size;
  91.             public ushort pending_sess;
  92.             public ushort max_cfg_sess;
  93.             public ushort max_sess;
  94.             public ushort max_sess_pkt_size;
  95.             public ushort name_count;
  96.         }
  97.         [StructLayout(LayoutKind.Sequential)]
  98.         public struct NAME_BUFFER
  99.         {
  100.             [MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.NCBNAMSZ)]
  101.             public byte[] name;
  102.             public byte name_num;
  103.             public byte name_flags;
  104.         }
  105.         [StructLayout(LayoutKind.Sequential)]
  106.         public struct NCB
  107.         {
  108.             public byte ncb_command;
  109.             public byte ncb_retcode;
  110.             public byte ncb_lsn;
  111.             public byte ncb_num;
  112.             public IntPtr ncb_buffer;
  113.             public ushort ncb_length;
  114.             [MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.NCBNAMSZ)]
  115.             public byte[] ncb_callname;
  116.             [MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.NCBNAMSZ)]
  117.             public byte[] ncb_name;
  118.             public byte ncb_rto;
  119.             public byte ncb_sto;
  120.             public IntPtr ncb_post;
  121.             public byte ncb_lana_num;
  122.             public byte ncb_cmd_cplt;
  123.             [MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
  124.             public byte[] ncb_reserve;
  125.             public IntPtr ncb_event;
  126.         }
  127.         [StructLayout(LayoutKind.Sequential)]
  128.         public struct LANA_ENUM
  129.         {
  130.             public byte length;
  131.             [MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.MAX_LANA)]
  132.             public byte[] lana;
  133.         }
  134.         [StructLayout(LayoutKind.Auto)]
  135.         public struct ASTAT
  136.         {
  137.             public ADAPTER_STATUS adapt;
  138.             [MarshalAs(UnmanagedType.ByValArray, SizeConst = (int)NCBCONST.NUM_NAMEBUF)]
  139.             public NAME_BUFFER[] NameBuff;
  140.         }
  141.         public class Win32API
  142.         {
  143.             [DllImport("NETAPI32.DLL")]
  144.             public static extern char Netbios(ref NCB ncb);
  145.         }
  146.         public string GetMacAddress()
  147.         {
  148.             string addr = "";
  149.             try
  150.             {
  151.                 int cb;
  152.                 ASTAT adapter;
  153.                 NCB Ncb = new NCB();
  154.                 char uRetCode;
  155.                 LANA_ENUM lenum;
  156.                 Ncb.ncb_command = (byte)NCBCONST.NCBENUM;
  157.                 cb = Marshal.SizeOf(typeof(LANA_ENUM));
  158.                 Ncb.ncb_buffer = Marshal.AllocHGlobal(cb);
  159.                 Ncb.ncb_length = (ushort)cb;
  160.                 uRetCode = Win32API.Netbios(ref Ncb);
  161.                 lenum = (LANA_ENUM)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(LANA_ENUM));
  162.                 Marshal.FreeHGlobal(Ncb.ncb_buffer);
  163.                 if (uRetCode != (short)NCBCONST.NRC_GOODRET)
  164.                     return "";
  165.                 for (int i = 0; i < lenum.length; i++)
  166.                 {
  167.                     Ncb.ncb_command = (byte)NCBCONST.NCBRESET;
  168.                     Ncb.ncb_lana_num = lenum.lana[i];
  169.                     uRetCode = Win32API.Netbios(ref Ncb);
  170.                     if (uRetCode != (short)NCBCONST.NRC_GOODRET)
  171.                         return "";
  172.                     Ncb.ncb_command = (byte)NCBCONST.NCBASTAT;
  173.                     Ncb.ncb_lana_num = lenum.lana[i];
  174.                     Ncb.ncb_callname[0] = (byte)'*';
  175.                     cb = Marshal.SizeOf(typeof(ADAPTER_STATUS)) + Marshal.SizeOf(typeof(NAME_BUFFER)) * (int)NCBCONST.NUM_NAMEBUF;
  176.                     Ncb.ncb_buffer = Marshal.AllocHGlobal(cb);
  177.                     Ncb.ncb_length = (ushort)cb;
  178.                     uRetCode = Win32API.Netbios(ref Ncb);
  179.                     adapter.adapt = (ADAPTER_STATUS)Marshal.PtrToStructure(Ncb.ncb_buffer, typeof(ADAPTER_STATUS));
  180.                     Marshal.FreeHGlobal(Ncb.ncb_buffer);
  181.                     if (uRetCode == (short)NCBCONST.NRC_GOODRET)
  182.                     {
  183.                         if (i > 0)
  184.                             addr += ":";
  185.                         addr = string.Format("{0,2:X}{1,2:X}{2,2:X}{3,2:X}{4,2:X}{5,2:X}",
  186.                          adapter.adapt.adapter_address[0],
  187.                          adapter.adapt.adapter_address[1],
  188.                          adapter.adapt.adapter_address[2],
  189.                          adapter.adapt.adapter_address[3],
  190.                          adapter.adapt.adapter_address[4],
  191.                          adapter.adapt.adapter_address[5]);
  192.                     }
  193.                 }
  194.             }
  195.             catch
  196.             { }
  197.             return addr.Replace(' ''0');
  198.         }
  199.     }
  200. }

使用方法举例:

  1. //获取硬盘序列号
  2. Hardware.HardwareInfo hardwareInfo = new Hardware.HardwareInfo();
  3. string hardDiskID = hardwareInfo.GetHardDiskID();
  4. System.Console.WriteLine(hardDiskID);
  5. //获取CPU序列号
  6. string cpuID = hardwareInfo.GetCpuID();

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多