`
wsql
  • 浏览: 12102040 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

c#如何获得cpu,硬盘的物理序列号

阅读更多

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

}
}

分享到:
评论

相关推荐

    获取 硬盘物理序列号 获得唯一硬盘序列号 唯一标识 纯API方法,没有DLL,没有控件,另外给出了WMI方法的结果作为比较

    2.使用说明:打开程序后,点按钮后,三个TEXTBOX分别显示全球唯一标识的硬盘物理序列号、WMI方法获取的硬盘序列号、WMI方法获取的CPU序列号 3.WMI方法被很多人诟病,有说读不出来什么的,我测试了几台机器确实有读不...

    获取硬盘物理序列号和CPU序列号

    在IT领域,获取硬件设备的信息是常见的需求,例如硬盘物理序列号和CPU序列号。这些信息对于系统管理和软件授权等方面至关重要。以下将详细介绍如何在不同的编程环境中获取这些信息。 首先,硬盘物理序列号是硬盘...

    使用C#获取CPU及硬盘序列号

    在示例代码中,使用了`ManagementObjectSearcher`类执行查询,其参数为`SELECT * FROM Win32_PhysicalMedia`,这会返回硬盘物理介质的所有实例信息。通过遍历查询结果,我们可以读取`SerialNumber`属性,即硬盘的...

    C# 获取CPU 硬盘 序列号 获取硬件信息 等等

    本文将详细讲解如何使用C#语言获取CPU、硬盘、MAC地址以及主机名等关键硬件信息。 首先,让我们了解一下C#获取CPU信息的方法。CPU(中央处理器)是计算机的核心组件,其型号和序列号可以帮助我们识别和诊断性能问题...

    获取CPU及硬盘序列号

    ### 获取CPU及硬盘序列号 在计算机硬件管理与识别领域,获取CPU(中央处理器)以及硬盘的序列号是一项重要的技术手段。序列号是用于唯一标识硬件设备的重要信息,常用于设备跟踪、授权验证等场景。以下将详细介绍...

    C# 读取机器码,CPU序列号,生成注册码类

    需要注意的是,`VolumeSerialNumber`字段返回的是硬盘的序列号,而非物理磁盘本身的序列号。 ### 三、获取CPU序列号 CPU序列号是另一个重要的硬件标识符,同样用于生成注册码。可以使用`Win32_Processor` WMI 类来...

    C#程序获得cpu,硬盘的序列号.pdf

    在C#编程中,获取计算机硬件的信息,如CPU序列号和硬盘序列号,通常涉及到操作系统级别的交互。在本文中,我们将深入探讨如何使用C#语言通过`System.Management`命名空间来实现这一目标。 首先,为了能够访问系统...

    c#获取cpu 主板 硬盘ID

    在IT领域,尤其是在系统管理和软件开发中,有时我们需要获取计算机硬件的相关信息,如CPU序列号、主板ID(也称为基板ID或系统UUID)、硬盘序列号以及网卡MAC地址等。这些信息对于软件授权、设备识别和故障排查等方面...

    获取CPU序列号, 硬盘序列号, 网卡物理地址的C#写的DLL

    综上所述,通过使用C#编写DLL,我们可以分别获取CPU序列号、硬盘序列号和网卡物理地址。这些功能对于开发系统管理、设备跟踪和认证类的应用程序非常有用。在实际项目中,可以根据需求封装成类库,方便在多个项目中...

    使用API获取硬盘序物理列号

    总之,这个C#程序展示了如何利用Windows API来获取硬盘物理序列号,这是一个涉及系统底层操作的实例,对于理解系统级编程和硬件信息的获取具有一定的教育意义。开发人员可以以此为基础,扩展到其他硬件信息的获取,...

    C#根据CPU硬盘获取机器码源码(201903)

    "C#根据CPU硬盘获取机器码源码(201903)"是一个这样的项目,它利用C#编程语言,通过读取计算机的硬件信息,如CPU序列号和硬盘ID,来生成一个唯一的“机器码”,以此作为该特定计算机的标识。这个机器码可以用于软件...

    C语言获取硬件信息(CPU序列号,硬盘序列号,网卡IP、MAC地址、是否插入网线).zip

    本文将详细讲解如何使用C语言在Linux和Windows操作系统下获取CPU序列号、硬盘序列号以及网卡的相关信息,如网卡名称、IP地址、MAC地址和网络连接状态。 首先,让我们关注CPU序列号的获取。在Windows系统中,可以...

    取得CPU,硬盘序列号,注册码示例源程序

    在IT领域,获取系统硬件信息是常见的需求,例如CPU序列号、硬盘序列号以及网络接口卡(网卡)的MAC地址。这些信息在软件激活、系统安全检测、硬件故障排查等方面都有重要作用。以下是对这些概念的详细解释: 1. **...

    获取硬盘序列号 CPU MAC win7 可用

    本文将详细讲解如何在Windows 7操作系统下获取硬盘序列号、CPU信息以及MAC地址,这些知识点对于系统维护、软件定制以及硬件问题排查至关重要。 首先,硬盘序列号是每个硬盘独一无二的标识符,由制造商在生产时分配...

    c#获取CPU序列号、主板序列号、硬盘ID

    这个可以通过`DriveInfo`类来获取,但请注意,这并不等同于硬盘的物理序列号,它是由操作系统随机生成的: ```csharp public static string GetHardDriveId(string driveLetter) { DriveInfo drive = new ...

    c#获取网卡MAC地址,主板信息,CPU序列号,硬盘卷标……代码

    在C#编程中,获取计算机硬件的详细信息是常见的需求,比如网卡MAC地址、主板信息、CPU序列号以及硬盘卷标等。这些信息对于软件的授权验证、系统监控或者故障排查都非常重要。下面我们将详细讲解如何使用C#来获取这些...

    C#根据CPU硬盘获取机器码源码--完整版)

    在给定的压缩包文件中,"C#根据CPU硬盘获取机器码源码--完整版)"应该包含了这个功能的完整实现,包括可能的错误处理、更全面的硬件检测和更复杂的机器码生成逻辑。学习和理解这段源码可以帮助开发者更好地掌握C#编程...

    C#获取硬盘编号、CPU编号及类型、内存大小及使用情况

    在C#编程中,获取计算机硬件的相关信息,如硬盘编号、CPU编号及类型以及内存大小和使用情况,是系统管理或软件开发中的常见需求。这些信息对于系统监控、性能优化和资源分配至关重要。以下是如何使用C#实现这些功能...

    C#根据CPU硬盘获取机器码源码

    这个"C#根据CPU硬盘获取机器码源码"的项目是关于如何在C#编程环境中,通过读取系统硬件信息来创建一个独特的标识符,这在软件授权验证、防盗版或者定制化服务等方面非常有用。接下来,我们将深入探讨这个主题。 ...

    C#获得PC网卡号、CPU号、硬盘号等信息

    以下将详细介绍如何使用C#获取网卡号(MAC地址)、CPU序列号、硬盘序列号以及IP地址和登录用户名的相关知识。 1. **获取网卡号(MAC地址)** MAC地址是物理网络接口控制器(网卡)的唯一标识。在C#中,可以使用`...

Global site tag (gtag.js) - Google Analytics