C# 获取硬件信息工具类

写在前面

通过性能计数器类 PerformanceCounter 传入计数器名称,获取对应的系统指标数据,以便进行分析和参考。
通过System.Management类库中的ManagementObjectSearcher类实现对管理信息的查询,比如:主板信息、内存信息、硬盘信息、显卡信息、声卡信息、网卡信息、生产商和生产日期等。

需引入一下命名空间:

using System.Diagnostics;
using System.Management;
using System.Net.NetworkInformation;
using System.Text.Json;

代码实现

    public class DeviceInfoHelper{/// <summary>/// 获取CPU利用率/// </summary>public static float GetCpuStatus(){// 创建对 CPU 占用百分比的性能计数器。var cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");if (cpuCounter != null){return cpuCounter.NextValue();}return 0;}/// <summary>/// 获取剩余内存/// </summary>public static float GetAvailableMemory(){// 创建内存占用字节数的性能计数器var ramCounter = new PerformanceCounter("Memory", "Available MBytes");if (ramCounter != null){return ramCounter.NextValue();}return 0;}/// <summary>/// 获取当前进程CPU和内存使用情况/// </summary>public static Tuple<float, float> GetCurrentProcessorUsage(){var processName = Process.GetCurrentProcess().ProcessName;var theCPUCounter = new PerformanceCounter("Process", "% Processor Time", processName);var theMemCounter = new PerformanceCounter("Process", "Working Set", processName);return new Tuple<float, float>(theCPUCounter.NextValue(), theMemCounter.NextValue());}/// <summary>/// 获取硬件信息摘要/// </summary>public static string GetHardwareSummary(){var hdInfo = new HardwardSummary{MainboardName = "未知",MemorySize = "未知",HarddiskSize = "未知",VideocardName = "未知",SoundcardName = "未知",NetworkcardName = "未知",ManufacturerName = "未知",ManufactureDate = "未知"};#region 主板信息try{ManagementObjectSearcher myMainboard = new ManagementObjectSearcher("SELECT * FROM Win32_BaseBoard");foreach (ManagementObject board in myMainboard.Get()){hdInfo.MainboardName = board["Product"].ToString();}}catch (Exception ex){hdInfo.MainboardName = "未知";}#endregion#region 内存信息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;}hdInfo.MemorySize = MemorySize.ToString() + "G";}catch (ManagementException e){hdInfo.MemorySize = "未知";}#endregion#region 硬盘信息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"];hdInfo.HarddiskSize = capacity.ToString() + "|" + mediaType.ToString();}}catch (Exception ex){hdInfo.HarddiskSize = "未知";}#endregion#region 显卡信息try{ManagementObjectSearcher myVideoObject = new ManagementObjectSearcher("select * from Win32_VideoController");foreach (ManagementObject obj in myVideoObject.Get()){hdInfo.VideocardName = obj["Name"].ToString();}}catch (ManagementException ex){hdInfo.VideocardName = "未知";}#endregion#region 声卡信息try{// 创建WMI搜索对象ManagementObjectSearcher mySoundcard = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_SoundDevice");// 遍历搜索结果foreach (ManagementObject mo in mySoundcard.Get()){// 获取声卡名称hdInfo.SoundcardName = mo.GetPropertyValue("Name").ToString();}}catch (ManagementException ex){hdInfo.SoundcardName = "未知";}#endregion#region 网卡信息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")){hdInfo.NetworkcardName = S1;}}}}catch (ManagementException ex){hdInfo.NetworkcardName = "未知";}#endregion#region 生产商和生产日期try{//获取生产商ManagementObjectSearcher ManufacturerInfo = new ManagementObjectSearcher("select * from Win32_ComputerSystem");foreach (ManagementObject obj in ManufacturerInfo.Get()){hdInfo.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);hdInfo.ManufactureDate = String.Format("{0:d}", DT);}}catch (Exception ex){hdInfo.ManufacturerName = "未知";hdInfo.ManufactureDate = "未知";}#endregionreturn JsonSerializer.Serialize(hdInfo);}}public class HardwardSummary{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; }}

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

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

相关文章

Elasticsearch(一)

一&#xff1a;简介 The Elastic Stack, 包括 Elasticsearch、 Kibana&#xff08;展示数据的项目&#xff09;、 Beats 和 Logstash&#xff08;这两个是采集和传输数据的项目&#xff09; 这些项目组合形成的技术栈称为ELK Stack&#xff0c;能够安全可靠地获取任何来源、任…

想学计算机视觉入门的可以看过来了

文章写了有一段时间了&#xff0c;期间不少小伙伴来咨询如何自学入门AI&#xff0c;或者咨询一些AI算法。 90%的问题我都回复了&#xff0c;但有时确实因为太忙&#xff0c;没顾得过来。 在这个过程中&#xff0c;我发现很多小伙伴问的问题都类似&#xff1a;比如如何入门计算…

从 0 到 1 开发一个 node 命令行工具

G2 5.0 推出了服务端渲染的能力&#xff0c;为了让开发者更快捷得使用这部分能力&#xff0c;最写了一个 node 命令行工具 g2-ssr-node&#xff1a;用于把 G2 的 spec 转换成 png、jpeg 或者 pdf 等。基本的使用如下&#xff1a; $ g2-ssr-node g2png -i ./bar.json -o ./bar.…

Django RestFramework

安装restframework pip install djangorestframework pip install markdown # Markdown support for the browsable API. pip install django-filter # Filtering support安装其他模块 pip install pillowpip install django-cors-headers建模和迁移数据 drf包含四个…

MySQL中的锁(简单)

目录 1. 共享锁&#xff08;Shared Lock&#xff09;&#xff1a; 2. 排他锁&#xff08;Exclusive Lock&#xff09;&#xff1a; 3. 行级锁&#xff08;Row-Level Lock&#xff09;&#xff1a; 4. 页级锁&#xff08;Page-Level Lock&#xff09;&#xff1a; 5. 表级锁…

唯创知音WT2003H系列MP3录音语音芯片:控制方式灵活,高品质录音与内置功放完美结合

在音频技术日新月异的今天&#xff0c;一款功能强大、性能稳定的录音芯片对于电子产品的重要性不言而喻。而唯创知音的WT2003H系列MP3录音芯片&#xff0c;凭借其灵活的控制方式、高品质录音功能以及内置的D类功放&#xff0c;成为了市场上备受瞩目的明星产品。 首先&#xff…

shell编程系列(5)-函数的定义

文章目录 前言函数定义处理函数参数通过getopts接收参数 前言 函数是编程语言中最重要的部分之一&#xff0c;虽然在shell脚本中并不是必须的&#xff0c;但是函数可以提高代码的复用性和可读性&#xff0c;当我们编写稍微复杂的脚本时&#xff0c;函数就是一个好帮手&#xf…

Linux常用命令——basename命令

在线Linux命令查询工具 basename 打印目录或者文件的基本名称 补充说明 basename命令用于打印目录或者文件的基本名称。basename和dirname命令通常用于shell脚本中的命令替换来指定和指定的输入文件名称有所差异的输出文件名称。 语法 basename(选项)(参数)选项 --help&…

深度学习可解释性Python库

本文整理了10个常用于可解释AI的Python库&#xff0c;方便我们更好的理解AI模型的决策。 原文阅读 什么是XAI&#xff1f; XAI&#xff08;Explainable AI&#xff09;的目标是为模型的行为和决策提供合理的解释&#xff0c;这有助于增加信任、提供问责制和模型决策的透明度…

STM32 基础知识

1. STM32微控制器的核心特性是什么&#xff1f; STM32微控制器是基于ARM Cortex-M 处理器 &#xff0c; 它具有高性能处理能力和低功耗的特性 &#xff0c; 适合用于嵌入式系统STM32系列具有多种多样的内存大小和丰富的内置外设选项&#xff0c;包括 多通道ADC &#xff0c; 定…

SAP_ABAP_编程基础_二进制文件_SMW0中上传与下载

SAP ABAP 顾问&#xff08;开发工程师&#xff09;能力模型_Terry谈企业数字化的博客-CSDN博客文章浏览阅读448次。目标&#xff1a;基于对SAP abap 顾问能力模型的梳理&#xff0c;给一年左右经验的abaper 快速成长为三年经验提供超级燃料&#xff01;https://blog.csdn.net/j…

(2)(2.1) Lightware SF40/C(360度)

文章目录 前言 1 安装SF40c 2 连接自动驾驶仪 3 通过地面站进行配置 4 参数说明 前言 Lightware SF40/C 360 度激光雷达(Lightware SF40/C 360degree lidar)可在 Copter-3.4 及更高版本的 Loiter 模式下用于物体回避。 &#xff01;Warning 该功能尚未在各种情况下进行过…

STM32F407-14.3.5-01捕获_比较通道

捕获/比较通道 每一个捕获/比较通道都是围绕着一个捕获/比较寄存器(包含影子寄存器) 包括: 捕获的输入部分(数字滤波、多路复用和预分频器)&#xff0c; 输出部分(比较器和输出控制)。 中文参考手册中框图分成了三大模块, 把框图合并成了一个整体,以便更好的理解捕获输…

分布式机器学习、联邦学习、多智能体的区别和联系——一文进行详细解释

1 分布式机器学习、联邦学习、多智能体介绍 最近这三个方面的论文都读过&#xff0c;这里写一篇博客归纳一下&#xff0c;以方便搞这几个领域的其他童鞋入门。我们先来介绍以下这三种机器学习范式的基本概念。 1.1 分布式机器学习介绍 分布式机器学习(distributed machine l…

redis配置详解

redis配置 注意&#xff1a;我使用的版本是6.0.10&#xff0c;不同版本可能略有差别 redis的配置主要集中在redis.conf文件中&#xff0c;接下来就来看一下redis.conf中包含了哪些内容 INCLUDES模块 该模块下可以使用include来包含其他的redis配置文件&#xff0c;将其他配置文…

除自身以外数组的乘积——力扣算法

题目 给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时…

再探Java集合系列—LinkedList

单向链表 双向链表 LinkedList适用于什么场景&#xff1f; 适用于需要频繁插入和删除元素的场景&#xff0c;例如消息聊天系统&#xff0c;一开始并不明确有多少记录&#xff0c;可以在空间满足的情况下不断增加数据 LinkedList的特点有哪些&#xff1f; LinkedList的底层采…

中兴小鲜50 ZTE 畅行50 刷机救砖演示机7543n root 虎贲 展锐 T760 解锁BL

系统信息 网络制式 支持中国移动、中国电信、中国联通、中国广电四大运营商5G频段&#xff1b;支持4G/3G/2G 系统平台 MyOS 13.0&#xff08;基于Android 13&#xff09; 硬件信息 处理器 展锐T760&#xff0c;高性能8核5G芯片 存储 6GB RAM128GB ROM 扩展 不支持 电池容…

【算法萌新闯力扣】:旋转链表

力扣题目&#xff1a;旋转链表 开篇 今天是备战蓝桥杯的第25天和算法村开营第3天&#xff01;经过这3天的学习&#xff0c;感觉自己对链表的掌握程度大大地提升&#xff0c;尤其是在帮村里的同学讨论相关问题时。本篇文章&#xff0c;给大家带来一道旋转链表的题目&#xff0c…

vue+echarts实现依赖关系无向网络拓扑结图节点折叠展开策略

目录 引言 一、设计 1. 树状图&#xff08;不方便呈现节点之间的关系&#xff0c;次要考虑&#xff09; 2. 力引导依赖关系图 二、力引导关系图 三、如何实现节点的Open Or Fold 1. 设计逻辑 节点展开细节 节点收缩细节 代码实现 四、结果呈现 五、完整代码 引言 我…