当前位置:首页 > C# > 正文内容

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

admin9年前 (2016-11-14)C#5553

这篇文章主要介绍了C#获取机器码的方法,结合实例形式详细分析了C#获取硬件机器名、CPU编号、硬盘编号、网卡mac等信息的相关实现方法,需要的朋友可以参考下

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

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


阅读剩余的71%

扫描二维码推送至手机访问。

版权声明:本文由视觉博客发布,如需转载请注明出处。

本文链接:https://feelsight.cn/post/24.html

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

C#图片处理示例(裁剪,缩放,清晰度,水印)

using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Drawing; using System.Drawing.Drawing2D; usin...

C#全局监听Windows键盘事件

1.工具类代码 using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; using System.Windows...

C# 窗体间传值(Form与From之间互相传值)

C# 窗体间传值(Form与From之间互相传值)

1、委托   两个窗体,窗体很简单,只实现改变颜色功能,一看就会: 代码如下,只贴按钮事件代码: 打开Form2按钮事件 private void button1_Click(object s...

高恪路由器批量管理监控系统

高恪路由器批量管理监控系统

一、采用C# 编写,可以批量监控路由器是否正常 功能: 1.显示当前路由IP、名字、实时上行速度、实时下行速度、主机数量、连接数、CPU占用率、内存占用率、CPU温度、运行时间等 2.可以显示10分钟实时流量 3.可以显示历史2小时、...

c#程序闪退日志记录/异常日志

以下代码是程序入口文件 using DDS_Form1; using System; using System.Collections.Generic; using System.IO; //using System.Linq; using System.Windows.Forms;...

C# .net动态加载第三方DLL

C#动态加载第三方DLL 当我们需要加载第三方非托管DLL时,通常会直接使用DllImport的方式,代码如下: [DllImport("GetFile.dll", CallingConvention = CallingConvention.StdCall,...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。