基于C#编写获取硬件信息的工具类

 更新时间:2023年11月29日 10:34:37   作者:rjcql  
这篇文章主要为大家详细介绍了如何利用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 = "未知";
            }
 
            #endregion
 
            return 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; }
    }

到此这篇关于基于C#编写获取硬件信息的工具类的文章就介绍到这了,更多相关C#获取硬件信息内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#校验时间格式的场景分析

    C#校验时间格式的场景分析

    本文通过场景分析给大家讲解C#里如何简单的校验时间格式,本次的场景属于比较常见的收单API,对第三方的订单进行签名验证,然后持久化到数据库,需要的朋友跟随小编一起看看吧
    2022-08-08
  • C#求n个数中最大值和最小值的方法

    C#求n个数中最大值和最小值的方法

    这篇文章主要介绍了C#求n个数中最大值和最小值的方法,涉及C#中max及min方法的使用技巧,需要的朋友可以参考下
    2015-05-05
  • C#编译器对局部变量的优化指南

    C#编译器对局部变量的优化指南

    这篇文章主要给大家介绍了关于C#编译器对局部变量的优化指南,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • C#中的随机数函数Random()

    C#中的随机数函数Random()

    这篇文章介绍了C#生成随机数的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • C#套接字(Socket)通信之UDP组播详解

    C#套接字(Socket)通信之UDP组播详解

    单播 Unicast是指客户端与服务器之间的点到点连接,组播和单播的差别是,必须得有一个“组”的概念,然后才能进行组播,本文就来和大家讲讲UDP组播的实现吧
    2023-05-05
  • c#实现字符串反序输出字符串的实例

    c#实现字符串反序输出字符串的实例

    下面小编就为大家分享一篇c#实现字符串反序输出字符串的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • C#读取word中表格数据的方法实现

    C#读取word中表格数据的方法实现

    本文主要介绍了C#读取word中表格数据的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • C#获取机器码的方法详解(机器名,CPU编号,硬盘编号,网卡mac等)

    C#获取机器码的方法详解(机器名,CPU编号,硬盘编号,网卡mac等)

    这篇文章主要介绍了C#获取机器码的方法,结合实例形式详细分析了C#获取硬件机器名、CPU编号、硬盘编号、网卡mac等信息的相关实现方法,需要的朋友可以参考下
    2016-07-07
  • C#实现备忘录功能

    C#实现备忘录功能

    这篇文章主要为大家详细介绍了C#实现备忘录功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • C#根据年月日计算星期几的函数小例子

    C#根据年月日计算星期几的函数小例子

    这篇文章介绍了C#根据年月日计算星期几的函数小例子,有需要的朋友可以参考一下
    2013-07-07

最新评论