C#获取计算机硬件的参数信息

news2025/1/16 1:42:27

  2019年的时候用PowerBuilder写过一个计算机信息收集小程序,《计算机信息收集小程序》,当时是查注册表来实现的。

   还可以通过对windows的API调用来做,这个稍微有点麻烦。

  使用C#也可以通过三种方式来实现,分别是读取注册表、windows的API调用、读取设备数据库,其中读取设备数据库比较方便快捷。

  这个星期居家办公很不方便,打算就用C#来写这个小程序。

  完成了硬件参数、操作系统、网络信息、软件以及安全信息的读取,后面就可以存入数据库方便网络上的调取和查询。

  思路:

  1、System.Management命名空间来获取对设备参数的提取;

  2、建立对象并设置好属性字段,逐个赋予对象属性字段的值;

  3、将对象序列化;

  4、反序列化读取对象的字段属性值,放入字典中;

  5、根据属性名逐一读取硬件参数。

  下面是读取硬件参数的代码: 

    public class OSInformation
    {
        public string OSName { get; set; }
        public string OSType { get; set; }
        public string OSSerialNumber { get; set; }
        public string ComputerName { get; set; }
        public string LogonUserName { get; set; }
    }

    public class HInformaiton
    {
        public string MainboardName { get; set; }
        public string MemorySize { get; set; }
        public string HarddiskSize { get; set; }
        public string VideocardName { get; set; }
        public string SoundcardName { get; set; }
        public string NetworkcardName { get; set; }
        public string ManufacturerName { get; set; }
        public string ManufactureDate { get; set; }
    }

    public class SInformation
    {
        public string VRV { get; set; }
        public string QAX { get; set; }
        public string WPS { get; set; }
    }

    public class WInformation
    {
        public string IP { get; set; }
        public string Subnetmask { get; set; }
        public string Gateway { get; set; }
    }

    class HardwareInformation
    {
        public static string GetJsonStr()
        {
            string ReturnStrJson = "";
            var HInfor = new HInformaiton { MainboardName ="未知", MemorySize = "未知", HarddiskSize = "未知", VideocardName = "未知", SoundcardName = "未知", NetworkcardName = "未知",ManufacturerName= "未知", ManufactureDate= "未知" };

            //主板信息
            try {
                ManagementObjectSearcher myMainboard = new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard");
                foreach (ManagementObject board in myMainboard.Get())
                {
                    HInfor.MainboardName = board["Product"].ToString();
                    //break;
                }
            }
            catch (Exception ex) {
                HInfor.MainboardName = "未知";
            }

            //内存信息
            try {
                ManagementObjectSearcher myMemory = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMemory");
                //定义内存总大小变量
                double MemorySize = 0;
                foreach (ManagementObject obj in myMemory.Get())
                {
                    //将内存大小换算成G单位
                    MemorySize += Convert.ToDouble(obj["Capacity"]) / 1024 / 1024 / 1024;
                }
                HInfor.MemorySize = MemorySize.ToString()+"G";
            } catch (ManagementException e) {
                HInfor.MemorySize = "未知";
            }

            //硬盘信息
            try {
                //获取本机所有硬盘信息  
                ManagementObjectSearcher myHarddisk = new ManagementObjectSearcher("select * from Win32_DiskDrive");
                foreach (ManagementObject drive in myHarddisk.Get())
                {
                    //获取硬盘容量
                    var capacity = (Convert.ToDouble(drive["Size"]) / 1024 / 1024 / 1024).ToString("0.00") + "G";
                    //获取硬盘类型
                    var mediaType = drive["MediaType"];
                    HInfor.HarddiskSize = capacity.ToString() + "|" + mediaType.ToString();
                }
            }
            catch (Exception ex) {
                HInfor.HarddiskSize = "未知";
            }

            //显卡信息
            try {
                ManagementObjectSearcher myVideoObject = new ManagementObjectSearcher("select * from Win32_VideoController");
                foreach (ManagementObject obj in myVideoObject.Get())
                {
                    HInfor.VideocardName = obj["Name"].ToString();
                }
            } catch (ManagementException e) {
                //e.Message
                HInfor.VideocardName = "未知";
            }

            //声卡信息
            try {
                // 创建WMI搜索对象
                ManagementObjectSearcher mySoundcard = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_SoundDevice");
                // 遍历搜索结果
                foreach (ManagementObject mo in mySoundcard.Get())
                {
                    // 获取声卡名称
                    HInfor.SoundcardName = mo.GetPropertyValue("Name").ToString();
                }
            } catch (ManagementException e) {
                HInfor.SoundcardName = "未知";
            }

            //网卡信息(Mac地址)
            try {

                // 获取本地网络接口信息 
                NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
                foreach (NetworkInterface adapter in nics)
                {
                    // 如果是RJ45网卡 
                    if (adapter.NetworkInterfaceType == NetworkInterfaceType.Ethernet)
                    {
                        string S1 = (string)adapter.Description;
                        if (S1.Contains("PCI")){
                            HInfor.NetworkcardName = S1;
                        }
                    }
                }
            }
            catch (ManagementException e) {
                HInfor.NetworkcardName = "未知";
            }

            //获取生产商和生产日期
            try
            {
                //获取生产商
                ManagementObjectSearcher ManufacturerInfo = new ManagementObjectSearcher("select * from Win32_ComputerSystem");
                foreach (ManagementObject obj in ManufacturerInfo.Get())
                {
                    HInfor.ManufacturerName = obj["Manufacturer"].ToString();
                }
                //获取生产日期
                ConnectionOptions options = new ConnectionOptions();
                ManagementScope scope = new ManagementScope("\\\\.\\root\\cimv2", options);
                ObjectQuery query = new ObjectQuery("SELECT * FROM Win32_BIOS");
                ManagementObjectSearcher BoisInfo = new ManagementObjectSearcher(scope, query);
                foreach (ManagementObject mo in BoisInfo.Get())
                {
                    string StrManufactureDate = mo["ReleaseDate"].ToString().Substring(0, 8);
                    DateTime DT = DateTime.ParseExact(StrManufactureDate, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture);
                    HInfor.ManufactureDate = String.Format("{0:d}", DT);
                }
            }
            catch (Exception e) { 
            
            }

            ReturnStrJson = JsonSerializer.Serialize(HInfor);
            return ReturnStrJson;
        }
    }

  需要添加引用:

using Microsoft.Win32;
using System.Management;
using System.Text.Json;
using System.Net.NetworkInformation;

  调用比较简单:

            string JsonStr;
            //硬件信息
            JsonStr = HardwareInformation.GetJsonStr();
            var ObjHardware = JsonSerializer.Deserialize<Dictionary<string, object>>(JsonStr);
            ListBox listbox1 = tabControl1.TabPages[0].Controls["listbox1"] as ListBox;
            listbox1.Items.Add("主板:"+ ObjHardware["MainboardName"]);
            listbox1.Items.Add("内存:" + ObjHardware["MemorySize"]);
            listbox1.Items.Add("硬盘:" + ObjHardware["HarddiskSize"]);
            listbox1.Items.Add("显卡:" + ObjHardware["VideocardName"]);
            listbox1.Items.Add("声卡:" + ObjHardware["SoundcardName"]);
            listbox1.Items.Add("网卡:" + ObjHardware["NetworkcardName"]);
            listbox1.Items.Add("计算机生产商:" + ObjHardware["ManufacturerName"]);
            listbox1.Items.Add("计算机生产日期:" + ObjHardware["ManufactureDate"]);

  使用的是Visual Studio 2022 社区版,后面再进行优化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/109944.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

import语句写烦了,怎么办?

每次写数据相关的代码时都会习惯性地先写一堆import语句&#xff0c;不管用得到用不到&#xff0c;先在文首默一遍再说。 或者&#xff1a; ❞虽说CtrlC和CtrlV也很方便&#xff0c;但是每次都要先“抄一次”也很烦。 那么有没有什么好的解决办法&#xff1f; Python有一个模…

《码出高效:java开发手册》六-数据结构与集合(一)

前言 本章主要是讲数据结构与集合&#xff0c;这章内容涉及到非常基础的知识&#xff0c;内容相对较多&#xff0c;首先从数组讲起&#xff0c;引申到集合框架&#xff0c;之后再到集合源码&#xff0c;最后介绍了高并发集合框架 集合 集合在代码中是collection&#xff0c;…

智牛股_第8章_Sentinel

智牛股_第8章_Sentinel 文章目录智牛股_第8章_Sentinel学习目标第1章 Sentinel集成使用1. 目标2. 步骤3. 实现3.1 生产环境最优配置方案3.2 用户服务集成3.3 熔断规则配置3.4 启动Sentinel监控台3.5 功能使用验证4. 总结第2章 用户注册功能1. 目标2. 步骤3. 实现3.1 用户注册流…

flstudio21版本有什么新功能及免费新插件

全能数字音乐工作站&#xff08;DAW&#xff09;编曲、剪辑、录音、混音&#xff0c;23余年的技术积淀和实力研发&#xff0c;FL Studio已经从电音领域破圈&#xff0c;成功蜕变为瞩目的全能DAW&#xff0c;把电脑变成全功能音乐工作室&#xff0c;接下来我们会为您一一展示 2…

Prometheus Operator实战—— Prometheus、Alertmanager、Grafana 监控RockectMq

1. RocketMQ 介绍 RocketMQ 是一个分布式消息和流数据平台&#xff0c;具有低延迟、高性能、高可靠性、万亿级容量和灵活的可扩展性。简单的来说&#xff0c;它由 Broker 服务器和客户端两部分组成&#xff0c;其中客户端一个是消息发布者客户端(Producer)&#xff0c;它负责向…

硬盘恢复工具软件哪个好?分享这些硬盘数据恢复工具软件

您刚刚删除了一些非常重要的文件&#xff01; 不要惊慌……您仍然有很大的机会可以以很少甚至免费的方式取回它们。 我们正在深入研究当今最好的硬盘恢复软件。 我们认为有一个明显的赢家&#xff0c;但我们提供了一些其他选项&#xff0c;以防您需要更高级的功能或使用不同…

四、网络层(三)IPv4

目录 3.1 IPv4地址 3.1.1分类编址 3.1.2子网划分与子网掩码 3.1.3无分类编址CIDR 3.1.4网络地址转换&#xff08;NAT&#xff09; 3.2 IPv4分组 3.2.1 IP分组&#xff08;IP数据报&#xff09;的格式 3.2.2 IP数据报分片 3.3 地址解析协议&#xff08;ARP&am…

计讯物联二次供水水池泵站监测方案,从根本上保障居民饮用水安全

水质污染、设施故障率高、供水压力、安防缺失、故障反馈周期长等城市高楼大厦高层供水问题层出不穷&#xff0c;给二次供水安全带来隐患和威胁。为确保高层住宅安全稳定地进行二次供水&#xff0c;计讯物联利用新一代物联网技术、信息技术、云计算、大数据、数字孪生技术等先进…

ESP32中micro-ROS与ROS2通信(点亮esp32指示灯)

前言 micro-ROS&#xff0c;是基于ROS2进行优化的一套轻量级ROS系统&#xff0c;它提供了完全部署的ROS 2生态系统的大多数吸引人的工具和功能&#xff0c;并具有入式和低资源设备的卓越能力&#xff0c;可以运行在MCU硬件平台。 传统上&#xff0c;即使机器人包含许多ROS&am…

视频号直播间首次突破1万人

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 12月21直播结束后&#xff0c;看了下直播数据&#xff0c;竟然有100多人在线时长达到了1小时以上。看来直播间用户的粘性越来越强了&#xff0c;固定用户越来越多。个人做直播已经2年了&#xff0c…

聚观早报 | 马斯克或将卸任推特CEO;小米内部人士回应年底裁员

今日要闻&#xff1a;马斯克或将卸任推特CEO&#xff1b;小米内部人士回应年底裁员&#xff1b;微软或将于明年收购Netflix&#xff1b;奥迪正逐步淘汰燃油车&#xff1b;支付宝开通健康防疫专区马斯克或将卸任推特CEO 自今年 10 月份入主推特以来&#xff0c;马斯克一系列大刀…

[洛谷]【深基16.例3】二叉树深度

一、题目描述 题目描述 有一个 n(n≤106)n(n \le 10^6)n(n≤106) 个结点的二叉树。给出每个结点的两个子结点编号&#xff08;均不超过 nnn&#xff09;&#xff0c;建立一棵二叉树&#xff08;根节点的编号为 111&#xff09;&#xff0c;如果是叶子结点&#xff0c;则输入 …

实测 | 海纳百川,华为OceanStor Pacific分布式存储为多元算力应用带来更优选择...

被称为开眼看世界的林则徐&#xff0c;在自己的书房中写了这样一副对联&#xff0c;以做自勉&#xff1a;海纳百川&#xff0c;有容乃大&#xff0c;壁立千仞&#xff0c;无欲则刚。包容的胸怀是我们做成很多事情的根基&#xff0c;也是一项产业战略、科技事业发展的关键。近几…

数据开源 | Magic Data开源基于ChatGPT的可扩展的对话数据集

在过去的一月里&#xff0c;人工智能领域中最火的话题莫过"ChatGPT"。ChatGPT是OpenAI于11月30日发布最新作品聊天机器人&#xff0c;开放公众免费测试。聊天机器人是一种软件应用程序&#xff0c;根据用户的提问做出回应、模仿人类的对话方式。目前&#xff0c;Chat…

做好程序中的axios错误提示

今天外包组的项目客户反馈老是出错&#xff0c;一看页面卡在加载数据过程中&#xff0c;前后台分离之后&#xff0c;页面变得很奇怪&#xff0c;脸面都出来了&#xff0c;就是没有具体值。 初级程序员在很长一段时间要经历一个升级过程&#xff0c;写的程序首先是写画面&#…

散户如何进行开展量化股票交易的?

散户如何进行开展量化股票交易的&#xff1f;也就是投资者交易的条件&#xff0c;达到了投资者设定的条件时候&#xff0c;系统接口就会自动交易&#xff0c;下面来看看具体的流程&#xff1a; 依据个股的历史记录&#xff0c;进行多因子选股&#xff0c;比如&#xff0c;把市…

Rasa 基于知识库的问答 音乐百科机器人

文章目录1. 使用 ActionQueryKnowledgeBase创建知识库NLU数据2. 音乐机器人nlu.ymlstories.ymlrules.ymldomain.ymlconfig.ymlendpoints.ymldata.json自定义动作 actions.py测试使用Neo4jlearn from https://github.com/Chinese-NLP-book/rasa_chinese_book_code 机器人返回了…

从“小螺栓血案”谈装配体模型连接螺栓6个正确的处理方法

经调查发现&#xff1a;“江苏启安建设工程有限公司提供了支吊架膨胀螺栓计算书&#xff0c;但计算书上无企业相关人员签字&#xff0c;未经监理单位审核同意&#xff0c;未报施工总包单位&#xff0c;未经设计单位审定&#xff1b;计算书认为支吊架应采用直径为12mm 的膨胀螺栓…

成为全栈程序员太难了?这个低代码高效率的报表工具绝对不能错过

现在程序员有个很奇怪的归宿&#xff0c;就是都在主动或被动地成为全栈程序员。前端被要求写后端的代码&#xff0c;后端被要求能看懂前端&#xff0c;美名其曰加速成长或为老板省钱&#xff01; 但一个人能做到全栈真的很难&#xff01;就拿报表开发而言&#xff0c;学习整个…

朴素贝叶斯

概要 前文介绍了贝叶斯公式基础以及在统计领域的基本应用贝叶斯基础_zhanglehes的博客-CSDN博客&#xff0c;本文将介绍它的一种新的转换形式&#xff0c;以及在机器分类领域的应用。 分类的数学描述 朴素贝叶斯公式推理 贝叶斯公式 在分类领域&#xff0c;将其改写如下 我们…