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

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

本篇文章将告诉大家如何获取 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 分支


目录
相关文章
|
6月前
|
Python
小型项目1:命令行计算器实现。
小型项目1:命令行计算器实现。
61 1
|
8月前
|
程序员
计算机如何快速打开计算器
计算机如何快速打开计算器
计算机如何快速打开计算器
|
8月前
|
openCL Linux 异构计算
Linux服务器如何查询GPU型号
【6月更文挑战第13天】Linux服务器如何查询GPU型号
1988 1
|
8月前
|
资源调度 JavaScript Ubuntu
Linux系统之安装Calcium网页计算器
【6月更文挑战第11天】Linux系统之安装Calcium网页计算器
86 1
一个计算器器脚本
一个计算器器脚本
86 1
|
Unix Linux C语言
【Linux指令④】Linux查看日历、时间、打包压缩文件、Linux中的计算器,常用热键 关机指令
【Linux指令④】Linux查看日历、时间、打包压缩文件、Linux中的计算器,常用热键 关机指令
做个计算器--制作计算器
做个计算器--制作计算器
267 0
做个计算器--制作计算器
|
Windows
Windows系统 clac命令详解,Windows系统使用命令行打开计算器
第一步、打开cmd 按下 win 键,输入 cmd 后回车,打开「命令提示符」
692 0
Windows系统 clac命令详解,Windows系统使用命令行打开计算器
|
算法 数据安全/隐私保护
做个计算器--生成注册码
做个计算器--生成注册码
420 0