做个计算器--获取硬件信息

简介: 做个计算器--获取硬件信息

本篇文章将告诉大家如何获取 CPU 序列号、主板序列和 BIOS 编号。


零、怎么获取硬件信息

在 .NET 中要获取计算机硬件信息,就必须使用 System.Management ,它是 .NET 框架中 WIM 的命名空间,所有硬件信息就是从这里获取到的。获取硬件信息的方法如下:


  1. 引用 System.Management ;
  2. 实例化 ManagenmentClass 类,并传入要绑定的 WMI 类。该类表示 WMI 中的一个 CIM 管理类。 CIM 类表示包括硬件、软件、进程等在内的管理信息;
  3. 获取 WMI 信息集合;
  4. 搜索对应的实例,遍历集合获取指定的内容;
  5. 获取到指定内容后跳出循环。

一、代码实现

下面我们通过代码的形式实现上一小节所描述的内容。

在 Method 文件夹下创建 HardwareInformation 类

using System;
using System.Collections.Generic;
using System.Linq;
//引用 System.Management
using System.Management;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Calculator.Method
{
    public class HardwareInformation
    {
        public static string Get(string path)
        {
            try
            {
                string propertyName = "";
                switch (path)
                {
                    //cpu 序列号
                    case "Win32_Processor":
                        propertyName = "ProcessorId";
                        break;
                    //主板序列号
                    case "Win32_BaseBoard":
                    //BIOS 编号
                    case "Win32_BIOS":
                    //硬盘序列号
                    case "Win32_PhysiclMedia":
                    case "Win32_DiskDrive":
                        propertyName = "SerialNumber";
                        break;
                    default:
                        break;
                }
                //实例化 ManagenmentClass 类,并传入要绑定的 WMI 类
                ManagementClass mc = new ManagementClass(path);
                //获取 WMI 信息集合
                ManagementObjectCollection moc = mc.GetInstances();
                string hi = null;
                //搜索对应的实例,遍历集合获取指定的内容
                foreach (ManagementObject mo in moc)
                {
                    //获取到指定内容后跳出循环
                    hi = mo.Properties[propertyName].Value.ToString();
                    break;
                }
                return hi.Trim();
            }
            catch(Exception e)
            {
                MessageBox.Show($"Error:获取硬件信息失败,{e.Message}");
                return "";
            }
        }
    }
}

在代码中我们看到获取硬盘序列号时 Win32_PhysicalMedia Win32_DiskDrive 都可以获取到,那么它俩有什么区别呢? Win32_DiskDrive 返回硬盘驱动器信息,这个信息是磁盘的物理信息,比如簇大小、总大小、块大小、PNPID之类,而

Win32_PhysicalMedia 返回当前计算机上的物理媒体信息,因为是返回“物理媒体”信息,所以它的通用性较高,返回的信息也比较抽象化。在实际开发中建议使用 Win32_PhysiclMedia 来获取硬件信息


编写完上面的代码后,我们在 Registered 窗体的 Load 方法中编写如下代码:

private void Registered_Load(object sender, EventArgs e)
        {
            //获取硬件信息
            string cpu = HardwareInformation.Get("Win32_Processor");
            string baseBoard = HardwareInformation.Get("Win32_BaseBoard");
            string bois = HardwareInformation.Get("Win32_BIOS");
            string diskDrive = HardwareInformation.Get("Win32_PhysiclMedia");
            //生成机器码
            MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
            string inf = BitConverter.ToString(md5.ComputeHash(UTF8Encoding.Default.GetBytes(cpu  + baseBoard + bois + diskDrive)), 4, 8);
            MachineCode_TextBox.Text = inf;
        }

运行代码,注册窗体将显示生成的机器码

image.png

二、总结

本篇文章讲解了 CPU 序列号、主板序列和 BIOS 编号的获取方法和思路,并通过代码进行实现。


Tip:因为本专题是针对具有开发经验的人员所编写,并且本专题主要讲解软件防破解,因此本文对于获取硬件相关的代码不在进行详细讲解。


Tip:本节代码下载,https://gitee.com/miaoshu_studio/calculator.git 拉取时选择 HardwareInformation 分支


目录
相关文章
|
2月前
|
Shell Linux C语言
【Shell 命令集合 磁盘管理 】Linux 控制光驱或可移动媒体设备的弹出和关闭操作 eject命令使用教程
【Shell 命令集合 磁盘管理 】Linux 控制光驱或可移动媒体设备的弹出和关闭操作 eject命令使用教程
40 1
|
2月前
|
Linux Shell C语言
【Shell 命令集合 设备管理 】Linux控制Linux系统的键盘LED setleds命令 使用指南
【Shell 命令集合 设备管理 】Linux控制Linux系统的键盘LED setleds命令 使用指南
45 0
|
2月前
|
存储 Linux Shell
【Shell 命令集合 系统设置 】Linux 获取指定模块的元信息 minfo命令 使用指南
【Shell 命令集合 系统设置 】Linux 获取指定模块的元信息 minfo命令 使用指南
31 0
|
2月前
|
存储 算法 Shell
【Shell 命令集合 设备管理 】Linux 显示当前系统中定义的键盘映射表 dumpkeys命令 使用指南
【Shell 命令集合 设备管理 】Linux 显示当前系统中定义的键盘映射表 dumpkeys命令 使用指南
34 0
|
2天前
|
网络协议 Shell Linux
LabVIEW 在NI Linux实时设备上访问Shell
LabVIEW 在NI Linux实时设备上访问Shell
|
1月前
|
安全 Linux
嵌入式Linux系统关闭串口调试信息的输出
嵌入式Linux系统关闭串口调试信息的输出
32 1
|
2月前
|
存储 Linux Shell
【Shell 命令集合 系统设置 】Linux 设置和显示硬件时钟 hwclock命令 使用指南
【Shell 命令集合 系统设置 】Linux 设置和显示硬件时钟 hwclock命令 使用指南
26 0
|
2月前
|
Linux Shell C语言
【Shell 命令集合 系统设置 】Linux 配置声音卡sndconfig命令 使用指南
【Shell 命令集合 系统设置 】Linux 配置声音卡sndconfig命令 使用指南
36 0
|
2月前
|
Shell Linux C语言
【Shell 命令集合 系统设置 】⭐Linux 显示系统的时钟时间 clock命令 使用指南
【Shell 命令集合 系统设置 】⭐Linux 显示系统的时钟时间 clock命令 使用指南
30 0
【Shell 命令集合 系统设置 】⭐Linux 显示系统的时钟时间 clock命令 使用指南
|
11月前
|
Unix Linux C语言
【Linux指令④】Linux查看日历、时间、打包压缩文件、Linux中的计算器,常用热键 关机指令
【Linux指令④】Linux查看日历、时间、打包压缩文件、Linux中的计算器,常用热键 关机指令