`

C#如何取硬件标志

    博客分类:
  • C#
阅读更多
using System;
using System.Runtime.InteropServices;
using  System.Management;
namespace Hardware
{
/// <summary>
/// Hardware_Mac 的摘要说明。
/// </summary>
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); 
  } 
  
  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#中获取硬件标识符,包括主机名、CPU标识符以及硬盘标识符等内容。这些标识符通常用于识别特定的计算机硬件配置,对于软件授权、设备管理等方面有着重要的作用。 ### ...

    C#如何取硬件标志,取机器名,取CPU编号,第一块硬盘编号 源代码

    在C#中,可以使用以下方法获取: ```csharp using System.Net.NetworkInformation; // 获取网卡的第一个MAC地址 PhysicalAddress macAddress = NetworkInterface.GetAllNetworkInterfaces() .FirstOrDefault(n =&gt;...

    C#获取硬件标志.cs

    使用C#代码取得 取机器名 取CPU编号 获取硬盘序列号 获取MAC和ID

    ASP升级.net资料大全(c#入门 语言规范 源码教程 学习笔记 技术资料 面试题 asp与.net代码生成器)

    如何取硬件标志.txt 如何让应用程序只有一个实例运行.txt 如何如何插入照片到Excel.txt 如何识别键盘左右的shift,Ctrl或Alt键.txt 如何水晶按钮的程序生成.txt 如何为DataGrid添加下拉列表框.txt 如何用C#在...

    .net技术资料大全(语言规范 源码教程 学习笔记 技术资料 .net代码生成器)

    如何取硬件标志.txt 如何让应用程序只有一个实例运行.txt 如何如何插入照片到Excel.txt 如何识别键盘左右的shift,Ctrl或Alt键.txt 如何水晶按钮的程序生成.txt 如何为DataGrid添加下拉列表框.txt 如何用C#在...

    Web开发学习.pdf

    选择哪个版本并不关键,因为它们的基本操作相似,主要取决于个人计算机的配置。Visual Studio 2010对硬件要求较高,若电脑性能允许,可以选择该版本;否则,2008版是更经济的选择。 Web开发的学习路径应遵循一定的...

    计算机应用基础知识点.doc

    首先,我们可以从计算机的历史开始,1946年2月15日,ENIAC的诞生标志着电子计算机时代的开启。从第一代的电子管计算机到第四代的大规模、超大规模集成电路计算机,计算机在速度、精度、存储能力、逻辑判断力和可靠性...

    单片机概述与结构1

    在51单片机中,复位后,SP(堆栈指针)的初始值通常为07H,PC(程序计数器)的值被清零,I/O口的初始状态取决于硬件设计。单片机有四个工作寄存器区,这些区域的切换由PSW(程序状态字)中的RS0和RS1两位的状态决定...

    C语言教程-whitey主题.pdf

    20世纪50年代至70年代,高级语言的出现标志着计算机语言的一次重大飞跃。高级语言更接近于人类的自然语言,使用的是英文单词和数学公式式的语句,使得编程更加符合人的思维习惯。C语言作为高级语言的代表,不仅广泛...

    计算机应用基础复习题A.pdf

    22. 计算机程序设计语言:Java、C++、C#等都是高级语言,而机器语言是直接对应硬件的低级语言。 23. 数据通信系统模型:由数据源、数据通信网和数据宿三部分组成。 24. RAM特点:RAM是随机存取存储器,可以读写,...

    计算机应用基础知识点汇总.doc

    计算机应用基础涵盖了许多关键知识点,这些知识是理解和使用...总的来说,计算机应用基础是理解现代信息技术的基础,涵盖硬件、软件、网络、数据库和编程等多个方面,这些知识对于日常生活和工作中使用计算机至关重要。

    计算机应用基础知识点05930.doc

    1. **计算机历史**:1946年2月15日,ENIAC(埃尼阿克)在美国宾夕法尼亚大学诞生,标志着电子计算机的诞生。计算机经历了电子管、晶体管、集成电路以及大规模和超大规模集成电路四个主要发展阶段,性能不断提升,...

    2021-2022计算机二级等级考试试题及答案No.13793.docx

    7. 分辨率与颜色数:计算机中的分辨率和颜色数由显示卡设定,但实际显示效果取决于显示器的性能。 8. 第二代计算机元件:第二代电子计算机主要采用晶体管作为元件,取代了第一代的真空管。 9. 文本框属性:文本框...

    Silverlight讲解

    在ESRI开发用户大会中,Silverlight API(ArcGIS API for Silverlight)的发布标志着GIS技术与Web应用深度融合的新篇章。通过学习和运用Silverlight API,开发者能够构建既功能强大又用户体验优秀的GIS Web应用,...

    .NET串口编程讲解

    - **数据位(Data Bits)**:实际传输的数据位数,可以是5、6、7或8位,具体取决于通信协议。 - **停止位(Stop Bit)**:标志数据帧的结束,可以是1位、1.5位或2位。 - **波特率(Baud Rate)**:表示数据传输的速度,...

    学习MavLink

    | 0 | 开始标志位 | v1.0:0xFE (v0.9:0x55) | 用于标识一个有效的MavLink数据包 | | 1 | 载荷长度 | 0~255 | 表示有效载荷的长度 | | 2 | 数据包序列号 | 0~255 | 每个组件对其发送序列计数,允许丢包检查 | | 3 | ...

    2021-2022计算机二级等级考试试题及答案No.4639.docx

    **解释**:在 Java 或 C# 等面向对象的语言中,集合只能存储引用类型的数据,而不是基本数据类型。例如,在 Java 中,集合只能存储 `Integer` 而不是 `int`。 **示例**:题目中的说法“集合中不能存放基本数据类型...

    C++ 总结(总结+实例)

    同时,由于 Java、C# 等语言的兴起和硬件成本的下降,C++ 在用户级程序开发领域的地位逐渐被替代,更多地转向系统级别的程序开发。 3. **第三阶段(2000年至今)**:产生了许多新的编程技术和库,例如 Loki、MPL 等...

    2021-2022计算机二级等级考试试题及答案No.1191.docx

    - **B 项正确解析**:第二代电子计算机(大约1956年至1963年)使用晶体管作为主要逻辑元件,这标志着从第一代使用电子管的计算机向更高效、更小型化的技术转变。 ### 5. ASP.NET 支持的语言 **题目内容:** 以下哪...

Global site tag (gtag.js) - Google Analytics