CSharp获取主机所有设备的硬件信息和系统信息

本文详细介绍了如何使用C#编程语言获取主机上的所有设备硬件信息和操作系统详细资料,涵盖了从CPU、内存到硬盘、网络适配器等多个方面的内容,帮助开发者全面了解系统状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下包括所有的知识点:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Management;
using System.Net;
using System.Runtime.InteropServices;
using System.IO;
using System.Text.RegularExpressions;

namespace 获取主机所有的硬件信息
{
    class Program
    {
        static void Main(string[] args)
        {
            string Info = "";
            MachineInfo MI = new MachineInfo();
            Info = "\r\n主机名:"+Dns.GetHostName();

            //获取本地IP/公网IP
            Info += "\r\n本地IP:" + MI.GetIPAddress()[0];
            Info += "\r\n公网IP:" + MI.GetExtenalAddress()[0];

            Info += "\r\n";
            //本机基础设备序号信息
            Info += "\r\nMAC:" + MI.GetLocatMac();
            Info += "\r\n主板序列号:" + MI.GetBLOSSerialNumber();
            Info += "\r\nCPU序列号:" + MI.GetCPUSerialNumber();
            Info += "\r\n硬盘序列号:" + MI.GetCalicheNumber();
            Info += "\r\n网卡地址:" + MI.GetNetworkCarNumber();

            Info += "\r\n";
            //本机基础设备编码信息
            Info += "\r\nCPU编码WMI:" + MI.GetCPUNumberWMI();
            Info += "\r\n硬盘编码WMI:" + MI.GetCailcheNumberWMI();
            Info += "\r\n网卡硬件WMI:" + MI.GetNetworkcardNumberWMI();
            Info += "\r\nIP地址WMI:" + MI.GetIPAddressWMI();

            Info += "\r\n";
            //本机系统设备信息
            Info += "\r\n操作系统登陆用户名:" + MI.GetUserName();
            Info += "\r\n操作系统类型:" + MI.GetSystemType();
            Info += "\r\n物理内存:" + MI.GetRAM();
            Info += "\r\n显卡设备:" + MI.GetVideoPNPID();
            Info += "\r\n声卡设备:" + MI.GetSoundCard();
            Info += "\r\nCPU版本信息:" + MI.GetCPUVersionInformation();
            Info += "\r\nCPU名称信息:" + MI.GetCPUName();
            Info += "\r\nCPU制造厂商:" + MI.GetCPUManufacturer();
            Info += "\r\n主板制造厂商:" + MI.GetBoardMotherboard();
            Info += "\r\n主板编号:"+MI.GetBoardID();
            Info += "\r\n主板型号:" + MI.GetModelID();
            Console.WriteLine(Info);

            Console.ReadKey();
        }
    }

    /// <summary>
    /// 此类用于获取当前主机的相关信息
    /// </summary>
     public class MachineInfo
     {
         /*
          * 提供对大量管理信息和管理事件集合的访问,这些信息和事件是与根据 Windows 管理规范 (WMI) 结构对系统、设备和应用程序设置检测点有关的。
          * 应用程序和服务可以使用从 ManagementObjectSearcher 和 ManagementQuery 派生的类,查询感兴趣的管理信息(例如在磁盘上还剩多少可用空间、当前 CPU 利用率是多少、某一应用程序正连接到哪一数据库等等);
          * 或者应用程序和服务可以使用 ManagementEventWatcher 类预订各种管理事件。这些可访问的数据可以来自分布式环境中托管的和非托管的组件。
          * 
          * 获取主机设备信息时,需要使用到。Management命名空间
          * 在项目-》添加引用....里面引用System.Management
          * ************************************************************************************
          * 
          * ManagementObjectSearcher类 //获取主机所有信息的集合
          * 基于指定的查询检索管理对象的集合。 此类是用于检索管理信息的较为常用的入口点之一。 
          * 例如,它可以用于枚举系统中的所有磁盘驱动器、网络适配器、进程及更多管理对象,或者用于查询所有处于活动状态的网络连接以及暂停的服务等。
          * 在实例化之后,此类的实例可以接受在System.Management.ObjectQuery 或其派生类中表示的 WMI 查询作为输入,并且还可以选择接受一个 System.Management.ManagementScope(表示执行查询时所在的
          * 
          * ManagementObjectCollection//从ManagementObjectSearcher获取到的主机设备集合进行管理
          * 
          * ManagementObject//表示WMI的实例,获取或者使用
          * 
          * ManagementClass表示一个通用信息模型的管理类,这个管理类是WMI类。
          * WMI类是Windows 2K/XP管理系统的核心;对于其他的Win32操作系统,WMI是一个有用的插件。
          * WMI以CIMOM为基础,CIMOM即公共信息模型对象管理器(Common Information Model Object Manager)
          * 
          * ManagementClass类//此类的成员可以访问 WMI 数据
          * Win32_LogicalDisk, ,该类型可表示一个磁盘驱动器
          * Win32_Process, ,它表示的进程 Notepad.exe 等。 
          * 此类的成员可以访问 WMI 数据,使用一个特定的 WMI 类路径(如:Win32_LogicalDisk或者Win32_Process之类)
          * 
          */
         /// <summary>
         /// 获取本地IP,多个IP
         /// </summary>
         /// <returns></returns>
         public string[] GetIPAddress()
         {
             string hostName = Dns.GetHostName();//获取主机名
             IPAddress[] addresses = Dns.GetHostAddresses(hostName);//解析主机IP地址

             string[] IP = new string[addresses.Length];
             for (int i = 0; i < addresses.Length; i++)
             {
                 IP[i] = addresses[i].ToString().Trim();//每个IP保存在数组列表中
             }

             return IP;
         }

         /// <summary>
         /// 获取公网IP
         /// </summary>
         /// <returns></returns>
         public string[] GetExtenalAddress()
         {
             string[] IP = new string[] { "未获取到公网ip" };

             try
             {
                 WebRequest WR = WebRequest.Create(@"http://ip.qq.com/");
                 WebResponse WS = WR.GetResponse();
                 Stream s = WS.GetResponseStream();
                 StreamReader sr = new StreamReader(s, Encoding.UTF8);

                 Match m = Regex.Match(sr.ReadToEnd(), @"((25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(25[0-5]|2[0-4]\d|[01]?\d?\d)", RegexOptions.None);
                 if (m.Groups[0].Success)
                 {
                     IP[0] = m.Groups[0].Value.ToString().Trim();
                 }

                 WS.Close();

             }
             catch (Exception e)
             {
                 Console.WriteLine(e.Message.ToString());
             }

             return IP;
         }

         #region ManagementObjectSearcher
         /// <summary>
         /// 获取本机MAC
         /// </summary>
         /// <returns></returns>
         public string GetLocatMac()
         {
             string mac = null;
             try
             {
                 ManagementObjectSearcher Mac = new ManagementObjectSearcher("select * from Win32_NetworkAdapterConfiguration");//搜索主机设备对象
                 ManagementObjectCollection queryCollection = Mac.Get();//管理获取到的主机设备的集合
                 foreach (ManagementObject mo in queryCollection)
                 {
                     if (mo["IPEnabled"].ToString() == "True")
                     {
                         mac = mo["MacAddress"].ToString().Trim();
                     }
                 }
             }
             catch (Exception e)
             {
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值