最近学习过程中,想到提取系统硬件信息做一些验证,故而对网上提到的利用.NET System.Management类获取硬件信息做了进一步的学习、验证。验证是分别在4台电脑,XP SP3系统中进行,特将验证过程记录于此。

说明:

电脑1(联想品牌电脑);

电脑2(HP品牌电脑);

电脑3(联想品牌电脑);

电脑4(兼容机);

  • 获取CPU编号:
ManagementClass mc = new ManagementClass("Win32_Processor");  

ManagementObjectCollection moc = mc.GetInstances();  

string strID = null ;    

foreach( ManagementObject mo in moc )    

{    

 strID = mo.Properties["ProcessorId"].Value.ToString();  

 break;   

}              

textBox1.Text +=  "CPU ID:" + strID; 

 返回结果:

电脑1:CPU ID:BFEBFBFF00000F27

电脑2:CPU ID:BFEBFBFF00000F27

电脑3:CPU ID:BFEBFBFF00000F29

电脑4:CPU ID:BFEBFBFF00000F29

  • 获取主板编号:
ManagementClass mc = new ManagementClass("Win32_BaseBoard");  

ManagementObjectCollection moc = mc.GetInstances();  

string strID = null ;    

foreach( ManagementObject mo in moc )    

{    

 strID = mo.Properties["SerialNumber"].Value.ToString();  

 break;   

}              

textBox1.Text +=  "主板 ID:" + strID; 

返回结果:

电脑1:主板 ID:

电脑2:主板 ID:CN24401483

电脑3:主板 ID:AZF241001101

电脑4:主板 ID:

  • 获取硬盘编号:

ManagementClass mc = new ManagementClass("Win32_PhysicalMedia");  

//网上有提到,用Win32_DiskDrive,但是用Win32_DiskDrive获得的硬盘信息中并不包含SerialNumber属性。   

ManagementObjectCollection moc = mc.GetInstances();  

string strID = null ;    

foreach( ManagementObject mo in moc )    

{    

 strID = mo.Properties["SerialNumber"].Value.ToString();  

 break;   

}              

textBox1.Text +=  "硬盘 ID:" + strID;  

            ManagementClass mc = new ManagementClass("Win32_PhysicalMedia");

            //网上有提到,用Win32_DiskDrive,但是用Win32_DiskDrive获得的硬盘信息中并不包含SerialNumber属性。

            ManagementObjectCollection moc = mc.GetInstances();

            string strID = null ;  

            foreach( ManagementObject mo in moc )  

            {  

             strID = mo.Properties["SerialNumber"].Value.ToString();

             break; 

            }            

            textBox1.Text +=  "硬盘 ID:" + strID;

返回结果:

电脑1:硬盘 ID:4833395344463658202020202020202020202020

电脑2:硬盘 ID:WD-WMAJD1092385

电脑3:硬盘 ID:4a353756354d5939202020202020202020202020

电脑4:硬盘 ID:0637J2FW508014

  • 获取BIOS编号:

ManagementClass mc = new ManagementClass("Win32_BIOS");  

ManagementObjectCollection moc = mc.GetInstances();  

string strID = null ;    

foreach( ManagementObject mo in moc )    

{    

 strID = mo.Properties["SerialNumber"].Value.ToString();  

 break;   

}              

textBox1.Text +=  "BIOS ID:" + strID;

返回结果:

电脑1:BIOS ID:

电脑2:BIOS ID:CN24401483

电脑3:BIOS ID:

电脑4:BIOS ID:

总结:

由以上各步看出,通过Win32_Processor获取CPUID不正确,或者说Win32_Processor字段就不包含CPU编号信息。

通过Win32_BaseBoard获取主板信息,但不是所有的主板都有编号,或者说不是能获取所有系统主板的编号。

通过Win32_PhysicalMedia获取硬盘编号应该没有问题。但网上说可以通过Win32_DiskDrive获取,其实所得信息根本不包含SerialNumber。

通过Win32_BIOS获取BIOS信息,基本和获取主板信息差不多。就是说:不是所有的主板BIOS信息都有编号。

另外,可以将通过以上各字段所得信息输出,逐个查看所有信息 属性和对应的值。代码如下:

ManagementClass mc = new ManagementClass("Win32_Processor");  

ManagementObjectCollection moc = mc.GetInstances();   

foreach( ManagementObject mo in moc )    

{    

 textBox1.Text += "/r/n============CUP信息===========";  

 foreach (PropertyData pd in mo.Properties)  

 {  

     textBox1.Text += "/r/n" + pd.Name + "/t";  

     if (pd.Value != null)  

     {  

         textBox1.Text += pd.Value.ToString();  

     }  

 }  

 textBox1.Text += "/r/n/r/n=======================";  

}   

            ManagementClass mc = new ManagementClass("Win32_Processor");

            ManagementObjectCollection moc = mc.GetInstances(); 

            foreach( ManagementObject mo in moc )  

            {  

             textBox1.Text += "/r/n============CUP信息===========";

             foreach (PropertyData pd in mo.Properties)

             {

                 textBox1.Text += "/r/n" + pd.Name + "/t";

                 if (pd.Value != null)

                 {

                     textBox1.Text += pd.Value.ToString();

                 }

             }

             textBox1.Text += "/r/n/r/n=======================";

            }

===============================================

首先要添加对System.Management.dll的引用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
using Microsoft.Win32;
using System.Management;
using System.IO;
namespace 哈哈
{
class DataOperate
{
private SqlConnection conn = null;
public DataOperate(string connStr)
{
conn = new SqlConnection();
conn.ConnectionString = connStr;
}
private void ColseConnnection()
{
if (conn.State == ConnectionState.Open)
{
conn.Close();
}
}
private void OpenConnection()
{
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
}
/// <summary>
/// 这里是获取cpu的id
/// </summary>
/// <returns></returns>
public string GetProcessID()
{
try
{
string str = string.Empty;
ManagementClass mcCpu = new ManagementClass("win32_Processor");
ManagementObjectCollection mocCpu = mcCpu.GetInstances();
foreach (ManagementObject m in mocCpu)
{
str = m["Processorid"].ToString().Trim().Substring(0, 8);//BFEBFBFF00000F65
}
return str;
}
catch (Exception ex)
{
return "likeshan";
}
}
/// <summary>
/// 获取硬盘id
/// </summary>
/// <returns></returns>
public string GetHardDiskID()
{
try
{
string hdId = string.Empty;
ManagementClass hardDisk = new ManagementClass("win32_DiskDrive");
ManagementObjectCollection hardDiskC = hardDisk.GetInstances();
foreach (ManagementObject m in hardDiskC)
{
//hdId = m["Model"].ToString().Trim();
hdId = m.Properties["Model"].Value.ToString();//WDC WD800BB-56JKC0
}
return hdId;
}
catch
{
return "likeshan";
}
}
/// <summary>
/// 获取网卡地址
/// </summary>
/// <returns></returns>
public string GetNetwordAdapter()
{
try
{
string MoAddress = string.Empty;
ManagementClass networkAdapter = new ManagementClass("Win32_NetworkAdapterConfiguration");
ManagementObjectCollection adapterC = networkAdapter.GetInstances();
foreach (ManagementObject m in adapterC)
{
if ((bool)m["IPEnabled"] == true)
{
MoAddress = m["MacAddress"].ToString().Trim();
m.Dispose();
}
}
return MoAddress;
}
catch
{
return "likeshan";
}
}
public string GetBaseboard()
{
try
{
ManagementObjectSearcher mos = new ManagementObjectSearcher("select * from Win32_baseboard");
string serNumber = string.Empty;
string manufacturer = string.Empty;
string product = string.Empty;
foreach (ManagementObject m in mos.Get())
{
serNumber = m["SerialNumber"].ToString();//序列号
manufacturer = m["Manufacturer"].ToString();//制造商
product = m["Product"].ToString();//型号
}
return serNumber + " " + manufacturer + " " + product;
}
catch
{
return "likeshan";
}
}
/// <summary>
/// 加密算法(利用到了cpuid)
/// </summary>
/// <param name="data">要加密的字符串</param>
/// <returns></returns>
public string Encode(string data)
{
byte[] akey = ASCIIEncoding.ASCII.GetBytes(GetProcessID());
byte[] aIV = ASCIIEncoding.ASCII.GetBytes(GetProcessID());
using (DESCryptoServiceProvider CP = new DESCryptoServiceProvider())
{
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, CP.CreateEncryptor(akey, aIV), CryptoStreamMode.Write);
StreamWriter sw = new StreamWriter(cs);
sw.Write(data);
sw.Flush();
cs.FlushFinalBlock();
sw.Flush();
return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length);
}
}
/// <summary>
/// 加密算法(利用cpuid)
/// </summary>
/// <param name="data">需要解密的字符串</param>
/// <returns></returns>
public string Decode(string data)
{
byte[] akey = ASCIIEncoding.ASCII.GetBytes(GetProcessID());
byte[] aIV = ASCIIEncoding.ASCII.GetBytes(GetProcessID());
byte[] Enc = null;
try
{
Enc = Convert.FromBase64String(data);
}
catch
{
return null;
}
DESCryptoServiceProvider cp = new DESCryptoServiceProvider();
MemoryStream ms=new MemoryStream(Enc);
CryptoStream cs = new CryptoStream(ms, cp.CreateDecryptor(akey, aIV), CryptoStreamMode.Read);
StreamReader reader = new StreamReader(cs);
return reader.ReadToEnd();
}
}
}

==============================================

首先需添加对System.Management的引用。

using System.Runtime.InteropServices;   

using System.Management;   

  

namespace Hardware   

{   

    /// <summary>    

    /// HardwareInfo 的摘要说明。    

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

        }   

    }   

}


使用方法举例:

//获取硬盘序列号  
Hardware.HardwareInfo hardwareInfo = new Hardware.HardwareInfo();   

string hardDiskID = hardwareInfo.GetHardDiskID();   

System.Console.WriteLine(hardDiskID);   

  

//获取CPU序列号    

string cpuID = hardwareInfo.GetCpuID();   

System.Console.WriteLine(cpuID);   

//获取硬盘序列号Hardware.HardwareInfo hardwareInfo = new Hardware.HardwareInfo();string hardDiskID = hardwareInfo.GetHardDiskID();System.Console.WriteLine(hardDiskID);//获取CPU序列号string cpuID = hardwareInfo.GetCpuID();System.Console.WriteLine(cpuID);   

==========

引用楼主的代码:

//定义DLL文件名,此文件路径要加到系统Path中

private const string _fileDll = @"CPUID_Util.dll";

//GetCPUID是 dll里面的一个方法

private const string _FountionName = @"GetCPUID";

[DllImport(_fileDll, EntryPoint = _FountionName, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall)]

//C#中的申明

public static extern string  GetCPUID(string id);



 回复

//声明一个stringBuilder类型字符串

StringBuilder strcpu=new StringBuilder();

//将strcpu带入函数中

GetCPUID(strcpu);

//此时的strcpu已经是cpuid了   Console.writeLine(strcpu);

==================================

多核系统中每个处理器的ID是不同的,在哪个处理器上执行得到的就是哪个处理器的ID,获取ID之前可以用SetThreadAffinityMask指定在哪个处理器上执行,这样才能确保每次得到相同的结果。

C#获取电脑硬件信息(CPU ID、主板ID、硬盘ID、BIOS编号)相关推荐

  1. C#获取电脑硬件信息(CPU ID、主板ID、硬盘ID、BIOS编号

    C#获取电脑硬件信息(CPU ID.主板ID.硬盘ID.BIOS编号 http://www.cnblogs.com/liufei88866/archive/2010/05/11/1732671.htm ...

  2. python获取电脑硬件信息_Python实现的读取电脑硬件信息功能示例

    本文实例讲述了Python实现的读取电脑硬件信息功能.分享给大家供大家参考,具体如下: 上学那会,老师让我用java获取电脑硬件信息,CPU, 硬盘,MAC等,那个时候感觉搞了好久...... 今天, ...

  3. c# 获取电脑硬件信息通用查询类[测试通过]

    C#获取电脑硬件信息通用类[Computer]代码展示和分析,简介如下: 1.项目中添加System.Management引用. 2.添加类Computer,把下面代码全选,复制,粘贴. 3.使用方法 ...

  4. Python获取电脑硬件信息及状态的实现方法

    From: http://www.jb51.net/article/54470.htm 这篇文章主要介绍了Python获取电脑硬件信息及状态的实现方法,是一个很实用的技巧,需要的朋友可以参考下 本文以 ...

  5. 通过注册表获取电脑硬件信息

    通过注册表获取电脑硬件信息 可以获取的硬件信息:设备型号,设备厂商,设备SN号:电脑背面条形码下面,cpu型号,操作系统名称. 下面是获取sn号的代码示例: std::string GetSystem ...

  6. js怎么获取电脑硬件信息

    转载自品略图书馆 http://www.pinlue.com/article/2020/07/1708/2211037430301.html 想知道怎么获取电脑的硬件信息吗,下面是小编带来js怎么获取 ...

  7. c#中如何获取电脑硬件信息?山寨一个鲁大师

    最近Boss提了个需求,要收集下公司的电脑信息,配置比较低的淘汰掉.本来想用腾讯的电脑管家里的[硬件检测]工具,但也有些麻烦.它虽然可以将信息导出成txt文件,但录制作一张Excel表格就显得麻烦了, ...

  8. Java获取电脑硬件信息做license

    项目做license,分为两部部分: 一.一个小应用获取电脑的硬件信息(硬件的CPU的ID,和主板信息)生成唯一标识码 二.Java服务获取应用信息,生成唯一标识码,其他地方调用. 得到的字符串利用D ...

  9. python绑定电脑机器码_获取电脑硬件信息可破VMP SE WinLicense绑定机器码

    写到文件 (取运行目录 () + "\硬件信息.txt", 到字节集 (编辑框1.内容)) 置剪辑板文本 (编辑框1.内容) 信息框 ("已经复制硬件信息,目录也生成一个 ...

  10. c#获取电脑硬件信息参数说明(主板篇 Win32_BaseBoard )

    Caption  --简短说明 ConfigOptions   --数组,表示位于在底板上跳线和开关的配置. CreationClassName  --表示类的名称(就是Win32_baseboard ...

最新文章

  1. 人工智能如何获得知识?
  2. 【jdk源码分析】ArrayList的size()==0和isEmpty()
  3. 在使用postman中操作api接口测试403解决方法
  4. 近邻取样插值和其速度优化
  5. Java String类源码解析
  6. 锐捷交换机配置snmp版本_【交换机】交换机如何配置SNMP(网络管理协议)
  7. Linux centosVMware Tomcat介绍、安装jdk、安装Tomcat
  8. 十一、Shell 文件包含
  9. 今天整理了一些老作品
  10. PCA的本质----特征值分解
  11. 机器学习中的度量——字符串距离
  12. 目前最常用的计算机机箱类型为_2016年秋计算机基础理论题 答案解析
  13. 三星固态硬盘 SM951 NVME win7介绍与安装方法
  14. JS动态生成表格案例
  15. MES系统架构初版ZXW
  16. Spring MVC异常统一处理的三种方式
  17. IEEE 2021年新增Fellow出炉,70余位华人入选
  18. 公路路基路面回弹弯沉检测技术(转载)
  19. 多功能频谱分析仪TFN RMT系列,满足您对频谱分析仪的多种幻想。
  20. 并行编程,绝不是你想的那么简单

热门文章

  1. comsol频域模拟
  2. 尚硅谷Java入门视频教程(一)编程入门
  3. openstack虚拟机支持USB 重定向(usb映射)
  4. 王道计算机网络学习笔记
  5. Java 工程师修炼之道
  6. 【超实用精选】设计师必备的设计资源网站合集
  7. Fredholm第二类积分方程的MATLAB代码实现(1)
  8. k2p路由器搭建php,搭建ngrok服务器!!给k3.k3c.K2.k2p路由器使用!!详细教程!!!...
  9. java字符串中的数据排序
  10. 51单片机用C语言实现交通灯(红绿灯)源程序实训QY-KP1