c#获取机器名,cpu编号和第一硬盘号的源代码

 

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

该代码为一个类,可供其他类直接调用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值