**VS/C# 中的 ManagementClass 类和获取硬件的信息的用法**

在 .NET 的项目中,有时候需要获取计算机的硬件的相关信息,在 C# 语言中需要利用 ManagementClass 这个类来进行相关操作。

ManagementClass 类:对表示一个通用信息模型 (CIM) 管理类。 管理类是 WMI 类,如 Win32_LogicalDisk,该类型可表示一个磁盘驱动器,并 Win32_Process,它表示的进程 Notepad.exe 等。 此类的成员可以访问 WMI 数据,使用一个特定的 WMI 类路径。

  • 继承层次结构
    • System.Object
      • System.MarshalByRefObject
        • System.CommponentModel.Component
          • System.Management.ManagementBaseObject
            • System.Management.ManagementObject
              • System.Management.ManagementClass

1.GetInstances():此方法存在四个重载

GetInstances() 返回类的所有实例集合。
GetInstances(EnumerationOptions) 返回使用指定的选项的类的所有实例的集合。
GetInstances(ManagementOperationObserver) 以异步方式返回的类的所有实例的集合。
GetInstances(ManagementOperationObserver,
EnumerationOptions)
使用指定的选项以异步方式返回的类,所有实例的集合。

2.Get():

Get() 将WMI类信息绑定到的管理对象,(继承自 ManagementObject)。
Get(ManagementOperationObserver) 将以异步方式绑定到的管理对象,(继承自 ManagementObject)。

3.GetSubclasses():此方法存在四个重载版本

GetSubclasses() 返回所有子类的类的集合。
GetSubclasses(EnumerationOptions) 检索使用指定的选项的类的子类。
GetSubclasses(ManagementOperationObserver) 返回所有以异步方式从该类派生的类的集合。
GetSubclasses(ManagementOperationObserver,
EnumerationOptions)
检索所有类以异步方式派生自此类,使用指定的选项。

C# 提供了ManagementClass类来获取本机的一些基本信息,比如CPU的个数,CPU的频率,网卡的MAC,内存的大小,硬盘的大小等。

获取硬件信息代码:

using System;
using System.Management;

namespace 获取硬件信息
{
    /// <summary>
    /// 获取硬件信息方法类
    /// </summary>
    public class GetDrive
    {
        #region 获取MAC地址方法
        /// <summary>
        /// 获取MAC地址方法
        /// </summary>
        /// <returns>返回MAC地址</returns>
        public string GetMACString()
        {
            ManagementClass mAdapter = new ManagementClass("Win32_NetworkAdapterConfiguration");
            ManagementObjectCollection mo = mAdapter.GetInstances();
            foreach (ManagementBaseObject m in mo)
            {
                if ((bool)m["IpEnabled"] == true)
                {
                    return m["MacAddress"].ToString();
                }
            }
            mo.Dispose();
            return "";// null;
        }
        #endregion

        #region 获取CPU个数
        /// <summary>
        /// 获取CPU个数
        /// </summary>
        /// <returns>返回CPU个数</returns>
        public int GetCpuCount()
        {
            try
            {
                using (ManagementClass mCpu = new ManagementClass("Win32_Processor"))
                {
                    ManagementObjectCollection cpus = mCpu.GetInstances();
                    return cpus.Count;
                }
            }
            catch
            {
            }
            return -1;
        }
        #endregion

        #region 获取CPU的频率 这里之所以使用string类型的数组,主要是因为cpu的多核
        /// <summary>
        /// 获取CPU的频率 这里之所以使用string类型的数组,主要是因为cpu的多核
        /// </summary>
        /// <returns>返回CPU频率合集</returns>        
        public string[] GetCpuMHZ()
        {
            ManagementClass mc = new ManagementClass("Win32_Processor");
            ManagementObjectCollection cpus = mc.GetInstances();
            string[] mHz = new string[cpus.Count];
            int c = 0;
            ManagementObjectSearcher mySearch = new ManagementObjectSearcher("select * from Win32_Processor");
            foreach (ManagementObject mo in mySearch.Get())
            {
                mHz[c] = mo.Properties["CurrentClockSpeed"].Value.ToString();
                c++;
            }
            mc.Dispose();
            mySearch.Dispose();
            return mHz;
        }
        #endregion

        #region 获取硬盘的大小
        /// <summary>
        /// 获取硬盘的大小
        /// </summary>
        /// <returns>硬盘大小</returns>
        public string GetSizeOfDisk()
        {
            ManagementClass mc = new ManagementClass("Win32_DiskDrive");
            ManagementObjectCollection moj = mc.GetInstances();
            foreach (ManagementObject m in moj)
            {
                return m.Properties["Size"].Value.ToString();
            }
            return "-1";
        }
        #endregion

        #region 获取内存大小
        /// <summary>
        /// 获取内存的大小
        /// </summary>
        /// <returns>返回内存大小</returns>
        public string GetSizeOfMemery()
        {
            ManagementClass mc = new ManagementClass("Win32_OperatingSystem");
            ManagementObjectCollection moc = mc.GetInstances();
            double sizeAll = 0.0;
            foreach (ManagementObject m in moc)
            {
                if (m.Properties["TotalVisibleMemorySize"].Value != null)
                {
                    sizeAll += Convert.ToDouble(m.Properties["TotalVisibleMemorySize"].Value.ToString());
                }
            }
            mc = null;
            moc.Dispose();
            return sizeAll.ToString();
        }
        #endregion

        #region 获得CPU编号
        /// <summary>
        /// 获得CPU编号
        /// </summary>
        /// <returns>返回CPU编号</returns>
        public string GetCpuid()
        {
            var cpuid = string.Empty;
            var mc = new ManagementClass("Win32_Processor");
            var moc = mc.GetInstances();
            foreach (var o in moc)
            {
                var mo = (ManagementObject)o;
                cpuid = mo.Properties["ProcessorId"].Value.ToString();
            }
            return cpuid;
        }
        #endregion

        #region 获取硬盘序列号
        /// <summary>
        /// 获取硬盘序列号
        /// </summary>
        /// <returns>返回硬盘序列号</returns>
        public string GetDiskId()
        {
            //这种模式在插入一个U盘后可能会有不同的结果,如插入我的手机时
            var hDid = string.Empty;
            var mc = new ManagementClass("Win32_DiskDrive");
            var moc = mc.GetInstances();
            foreach (var o in moc)
            {
                var mo = (ManagementObject)o;
                hDid = (string)mo.Properties["Model"].Value;
                //这名话解决有多个物理盘时产生的问题,只取第一个物理硬盘
                break;
            }
            return hDid;
        }
        #endregion

        #region 获取网卡硬件地址
        /// <summary>
        /// 获取网卡硬件地址
        /// </summary>
        /// <returns>返回网卡硬件地址</returns>
        public string GetMacAddress()
        {
            var mac = "";
            var mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
            var moc = mc.GetInstances();
            foreach (var o in moc)
            {
                var mo = (ManagementObject)o;
                if (!(bool)mo["IPEnabled"]) continue;
                mac = mo["MacAddress"].ToString();
                break;
            }
            return mac;
        }
        #endregion

        #region 获取IP地址
        /// <summary>
        /// 获取IP地址
        /// </summary>
        /// <returns>返回IP地址</returns>
        public string GetIpAddress()
        {
            var st = string.Empty;
            var mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
            var moc = mc.GetInstances();
            foreach (var o in moc)
            {
                var mo = (ManagementObject)o;
                if (!(bool)mo["IPEnabled"]) continue;
                var ar = (Array)(mo.Properties["IpAddress"].Value);
                st = ar.GetValue(0).ToString();
                break;
            }
            return st;
        }
        #endregion

        #region 获取操作系统的登录用户名
        /// <summary>
        /// 获取操作系统的登录用户名
        /// </summary>
        /// <returns>返回操作系统的登录用户名</returns>
        public string GetUserName()
        {
            return Environment.UserName;
        }
        #endregion

        #region 获取计算机名
        /// <summary>
        /// 获取计算机名
        /// </summary>
        /// <returns>返回计算机名</returns>
        public string GetComputerName()
        {
            return Environment.MachineName;
        }
        #endregion

        #region 获取操作系统类型
        /// <summary>
        /// 获取操作系统类型
        /// </summary>
        /// <returns>返回操作系统类型</returns>
        public string GetSystemType()
        {
            var st = string.Empty;
            var mc = new ManagementClass("Win32_ComputerSystem");
            var moc = mc.GetInstances();
            foreach (var o in moc)
            {
                var mo = (ManagementObject)o;
                st = mo["SystemType"].ToString();
            }
            return st;
        }
        #endregion

        #region 获取物理内存
        /// <summary>
        /// 获取物理内存
        /// </summary>
        /// <returns>返回物理内存</returns>
        public string GetPhysicalMemory()
        {
            var st = string.Empty;
            var mc = new ManagementClass("Win32_ComputerSystem");
            var moc = mc.GetInstances();
            foreach (var o in moc)
            {
                var mo = (ManagementObject)o;
                st = mo["TotalPhysicalMemory"].ToString();
            }
            return st;
        }
        #endregion

        #region 获取显卡PNPDeviceID
        /// <summary>
        /// 获取显卡PNPDeviceID
        /// </summary>
        /// <returns>返回显卡PNPDeviceID</returns>
        public string GetVideoPnpId()
        {
            var st = "";
            var mos = new ManagementObjectSearcher("Select * from Win32_VideoController");
            foreach (var o in mos.Get())
            {
                var mo = (ManagementObject)o;
                st = mo["PNPDeviceID"].ToString();
            }
            return st;
        }
        #endregion

        #region 获取声卡PNPDeviceID
        /// <summary>
        /// 获取声卡PNPDeviceID
        /// </summary>
        /// <returns>返回声卡PNPDeviceID</returns>
        public string GetSoundPnpId()
        {
            var st = string.Empty;
            var mos = new ManagementObjectSearcher("Select * from Win32_SoundDevice");
            foreach (var o in mos.Get())
            {
                var mo = (ManagementObject)o;
                st = mo["PNPDeviceID"].ToString();
            }
            return st;
        }
        #endregion

        #region 获取CPU版本信息
        /// <summary>
        /// 获取CPU版本信息
        /// </summary>
        /// <returns>返回CPU版本信息</returns>
        public string GetCpuVersion()
        {
            var st = string.Empty;
            var mos = new ManagementObjectSearcher("Select * from Win32_Processor");
            foreach (var o in mos.Get())
            {
                var mo = (ManagementObject)o;
                st = mo["Version"].ToString();
            }
            return st;
        }
        #endregion

        #region 获取CPU名称信息
        /// <summary>
        /// 获取CPU名称信息
        /// </summary>
        /// <returns>返回CPU名称信息</returns>
        public string GetCpuName()
        {
            var st = string.Empty;
            var driveId = new ManagementObjectSearcher("Select * from Win32_Processor");
            foreach (var o in driveId.Get())
            {
                var mo = (ManagementObject)o;
                st = mo["Name"].ToString();
            }
            return st;
        }
        #endregion

        #region 获取CPU制造厂商
        /// <summary>
        /// 获取CPU制造厂商
        /// </summary>
        /// <returns>返回CPU制造厂商</returns>
        public string GetCpuFirm()
        {
            var st = string.Empty;
            var mos = new ManagementObjectSearcher("Select * from Win32_Processor");
            foreach (var o in mos.Get())
            {
                var mo = (ManagementObject)o;
                st = mo["Manufacturer"].ToString();
            }
            return st;
        }
        #endregion

        #region 获取主板制造厂商
        /// <summary>
        /// 获取主板制造厂商
        /// </summary>
        /// <returns>返回主板制造厂商</returns>
        public string GetBoardFirm()
        {
            var query = new SelectQuery("Select * from Win32_BaseBoard");
            var mos = new ManagementObjectSearcher(query);
            var data = mos.Get().GetEnumerator();
            data.MoveNext();
            var board = data.Current;
            return board.GetPropertyValue("Manufacturer").ToString();
        }
        #endregion

        #region 获取主板编号
        /// <summary>
        /// 获取主板编号
        /// </summary>
        /// <returns>返回主板编号</returns>
        public string GetBoardId()
        {
            var st = string.Empty;
            var mos = new ManagementObjectSearcher("Select * from Win32_BaseBoard");
            foreach (var o in mos.Get())
            {
                var mo = (ManagementObject)o;
                st = mo["SerialNumber"].ToString();
            }
            return st;
        }
        #endregion

        #region 获取主板型号
        /// <summary>
        /// 获取主板型号
        /// </summary>
        /// <returns>返回主板型号</returns>
        public string GetBoardType()
        {
            var st = string.Empty;
            var mos = new ManagementObjectSearcher("Select * from Win32_BaseBoard");
            foreach (var o in mos.Get())
            {
                var mo = (ManagementObject)o;
                st = mo["Product"].ToString();
            }
            return st;
        } 
        #endregion
    }
}
posted @ 2023-02-24 14:03  展V翅  阅读(423)  评论(0编辑  收藏  举报