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

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

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

本文实例讲述了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 "";    }  }//endpublic 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#相关内容感兴趣的读者可查看本站专题:《C#窗体 *** 作技巧汇总》、《C#常见控件用法教程》、《WinForm控件用法总结》、《C#程序设计之线程使用技巧总结》、《C# *** 作Excel技巧总结》、《C#中XML文件 *** 作技巧汇总》、《C#数据结构与算法教程》、《C#数组 *** 作技巧总结》及《C#面向对象程序设计入门教程》

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

总结

以上是内存溢出为你收集整理的C#获取机器码的方法详解(机器名,CPU编号,硬盘编号,网卡mac等)全部内容,希望文章能够帮你解决C#获取机器码的方法详解(机器名,CPU编号,硬盘编号,网卡mac等)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1258605.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存