以下包括所有的知识点:
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)
{