您现在的位置: 365建站网 > 365文章 > C#中的ManagementClass类和获取硬件的信息的用法

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

文章来源:365jz.com     点击数:9686    更新时间:2018-06-07 10:41   参与评论

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

   现在先来介绍一下ManagementClass类,首先看一下类的继承结构:

 

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

  一. 接下来我们来看一下ManagementClass类中一些较为常用的方法的源码:

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


2.Get():

 


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


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


获取本机MAC地址:

</>code

  1.        /// <summary>
  2.        /// 获取本机的MAC地址
  3.        /// </summary>
  4.        /// <returns></returns>
  5.        public static string GetMACString()
  6.        {
  7.            ManagementClass mAdapter = new ManagementClass("Win32_NetworkAdapterConfiguration");
  8.            ManagementObjectCollection mo = mAdapter.GetInstances();
  9.            foreach (ManagementBaseObject m in mo)
  10.            {
  11.                if ((bool)m["IpEnabled"] == true)
  12.                {
  13.                    return m["MacAddress"].ToString();
  14.                }
  15.            }
  16.            mo.Dispose();
  17.            return null;
  18.        }


获取本机CPU的个数:

</>code

  1. /// <summary>
  2.        /// 获取CPU的个数
  3.        /// </summary>
  4.        /// <returns></returns>
  5.        public static int GetCpuCount()
  6.        {
  7.            try
  8.            {
  9.                using (ManagementClass mCpu = new ManagementClass("Win32_Processor"))
  10.                {
  11.                    ManagementObjectCollection cpus = mCpu.GetInstances();
  12.                    return cpus.Count;
  13.                }
  14.            }
  15.            catch
  16.            {
  17.            }
  18.            return -1;
  19.        }


获取本机CPU的频率

</>code

  1. /// <summary>
  2.        /// 获取CPU的频率 这里之所以使用string类型的数组,主要是因为cpu的多核
  3.        /// </summary>
  4.        /// <returns></returns>
  5.        public static string[] GetCpuMHZ()
  6.        {
  7.            ManagementClass mc = new ManagementClass("Win32_Processor");
  8.            ManagementObjectCollection cpus = mc.GetInstances();
  9.            string[] mHz = new string[cpus.Count];
  10.            int c = 0;
  11.            ManagementObjectSearcher mySearch = new ManagementObjectSearcher("select * from Win32_Processor");
  12.            foreach (ManagementObject mo in mySearch.Get())
  13.            {
  14.                mHz[c] = mo.Properties["CurrentClockSpeed"].Value.ToString();
  15.                c++;
  16.            }
  17.            mc.Dispose();
  18.            mySearch.Dispose();
  19.            return mHz;
  20.        }


获取本机硬盘的大小

</>code

  1. /// <summary>
  2.        /// 获取硬盘的大小
  3.        /// </summary>
  4.        /// <returns></returns>
  5.        public static string GetSizeOfDisk()
  6.        {
  7.            ManagementClass mc = new ManagementClass("Win32_DiskDrive");
  8.            ManagementObjectCollection moj = mc.GetInstances();
  9.            foreach (ManagementObject m in moj)
  10.            {
  11.                return m.Properties["Size"].Value.ToString();
  12.            }
  13.            return "-1";
  14.        }

    


获取本机内存的大小:

</>code

  1. /// <summary>
  2.        /// 获取内存的大小
  3.        /// </summary>
  4.        /// <returns></returns>
  5.        public static string GetSizeOfMemery()
  6.        {
  7.            ManagementClass mc = new ManagementClass("Win32_OperatingSystem");
  8.            ManagementObjectCollection moc = mc.GetInstances();
  9.            double sizeAll = 0.0;
  10.            foreach (ManagementObject m in moc)
  11.            {
  12.                if (m.Properties["TotalVisibleMemorySize"].Value != null)
  13.                {
  14.                    sizeAll += Convert.ToDouble(m.Properties["TotalVisibleMemorySize"].Value.ToString());
  15.                }
  16.            }
  17.            mc = null;
  18.            moc.Dispose();
  19.            return sizeAll.ToString();
  20.        }


本程序是使用VS2005编写的,可运行。

ManageMentClass 对象被实例化时,根据初始化参数的不同能够获取不同的本地信息:"Win32_NetworkAdapterConfiguration" 获取本机网络适配器对象。据此可以获取网络地址等。"Win32_DiskDiver" 获取本机硬盘的相关信息,"Win32_Processor" 获取本机CPU相关的信息。"Win32_OperatingSystem" 获取内存等相关信息。


ManagementClass类的部分应用:

</>code

  1.   /// <summary>
  2.         /// 获得CPU编号
  3.         /// </summary>
  4.         /// <returns></returns>
  5.         public string GetCpuid()
  6.         {
  7.             var cpuid = string.Empty;
  8.             var mc = new ManagementClass("Win32_Processor");
  9.             var moc = mc.GetInstances();
  10.             foreach (var o in moc)
  11.             {
  12.                 var mo = (ManagementObject) o;
  13.                 cpuid = mo.Properties["ProcessorId"].Value.ToString();
  14.             }
  15.             return cpuid;
  16.         }
  17.  
  18.         /// <summary>
  19.         /// 获取硬盘序列号
  20.         /// </summary>
  21.         /// <returns></returns>
  22.         public string GetDiskSerialNumber()
  23.         {
  24.             //这种模式在插入一个U盘后可能会有不同的结果,如插入我的手机时
  25.             var hDid = string.Empty;
  26.             var mc = new ManagementClass("Win32_DiskDrive");
  27.             var moc = mc.GetInstances();
  28.             foreach (var o in moc)
  29.             {
  30.                 var mo = (ManagementObject) o;
  31.                 hDid = (string)mo.Properties["Model"].Value;
  32.                 //这名话解决有多个物理盘时产生的问题,只取第一个物理硬盘
  33.                 break;
  34.             }
  35.             return hDid;
  36.         }
  37.  
  38.         /// <summary>
  39.         /// 获取网卡硬件地址
  40.         /// </summary>
  41.         /// <returns></returns> 
  42.         public string GetMacAddress()
  43.         {
  44.             var mac = "";
  45.             var mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
  46.             var moc = mc.GetInstances();
  47.             foreach (var o in moc)
  48.             {
  49.                 var mo = (ManagementObject) o;
  50.                 if (!(bool) mo["IPEnabled"]) continue;
  51.                 mac = mo["MacAddress"].ToString();
  52.                 break;
  53.             }
  54.             return mac;
  55.         }
  56.  
  57.         /// <summary>
  58.         /// 获取IP地址
  59.         /// </summary>
  60.         /// <returns></returns>
  61.         public string GetIpAddress()
  62.         {
  63.             var st = string.Empty;
  64.             var mc = new ManagementClass("Win32_NetworkAdapterConfiguration");
  65.             var moc = mc.GetInstances();
  66.             foreach (var o in moc)
  67.             {
  68.                 var mo = (ManagementObject) o;
  69.                 if (!(bool) mo["IPEnabled"]) continue;
  70.                 var ar = (Array)(mo.Properties["IpAddress"].Value);
  71.                 st = ar.GetValue(0).ToString();
  72.                 break;
  73.             }
  74.             return st;
  75.         }
  76.  
  77.         /// <summary>
  78.         /// 操作系统的登录用户名
  79.         /// </summary>
  80.         /// <returns></returns> 
  81.         public string GetUserName()
  82.         {
  83.             return Environment.UserName;
  84.         }
  85.  
  86.  
  87.         /// <summary>
  88.         /// 获取计算机名
  89.         /// </summary>
  90.         /// <returns></returns>
  91.         public string GetComputerName()
  92.         {
  93.             return Environment.MachineName;
  94.         }
  95.  
  96.         /// <summary>
  97.         /// 操作系统类型
  98.         /// </summary>
  99.         /// <returns></returns> 
  100.         public string GetSystemType()
  101.         {
  102.             var st = string.Empty;
  103.             var mc = new ManagementClass("Win32_ComputerSystem");
  104.             var moc = mc.GetInstances();
  105.             foreach (var o in moc)
  106.             {
  107.                 var mo = (ManagementObject) o;
  108.                 st = mo["SystemType"].ToString();
  109.             }
  110.             return st;
  111.         }
  112.  
  113.         /// <summary>
  114.         /// 物理内存
  115.         /// </summary>
  116.         /// <returns></returns>
  117.         public string GetPhysicalMemory()
  118.         {
  119.             var st = string.Empty;
  120.             var mc = new ManagementClass("Win32_ComputerSystem");
  121.             var moc = mc.GetInstances();
  122.             foreach (var o in moc)
  123.             {
  124.                 var mo = (ManagementObject) o;
  125.                 st = mo["TotalPhysicalMemory"].ToString();
  126.             }
  127.             return st;
  128.         }
  129.  
  130.         /// <summary>
  131.         /// 显卡PNPDeviceID
  132.         /// </summary>
  133.         /// <returns></returns>
  134.         public string GetVideoPnpid()
  135.         {
  136.             var st = "";
  137.             var mos = new ManagementObjectSearcher("Select * from Win32_VideoController");
  138.             foreach (var o in mos.Get())
  139.             {
  140.                 var mo = (ManagementObject) o;
  141.                 st = mo["PNPDeviceID"].ToString();
  142.             }
  143.             return st;
  144.         }
  145.  
  146.         /// <summary>
  147.         /// 声卡PNPDeviceID
  148.         /// </summary>
  149.         /// <returns></returns>
  150.         public string GetSoundPnpid()
  151.         {
  152.             var st = string.Empty;
  153.             var mos = new ManagementObjectSearcher("Select * from Win32_SoundDevice");
  154.             foreach (var o in mos.Get())
  155.             {
  156.                 var mo = (ManagementObject) o;
  157.                 st = mo["PNPDeviceID"].ToString();
  158.             }
  159.             return st;
  160.         }
  161.  
  162.         /// <summary>
  163.         /// CPU版本信息
  164.         /// </summary>
  165.         /// <returns></returns>
  166.         public string GetCpuVersion()
  167.         {
  168.             var st = string.Empty;
  169.             var mos = new ManagementObjectSearcher("Select * from Win32_Processor");
  170.             foreach (var o in mos.Get())
  171.             {
  172.                 var mo = (ManagementObject) o;
  173.                 st = mo["Version"].ToString();
  174.             }
  175.             return st;
  176.         }
  177.  
  178.         /// <summary>
  179.         /// CPU名称信息
  180.         /// </summary>
  181.         /// <returns></returns>
  182.         public string GetCpuName()
  183.         {
  184.             var st = string.Empty;
  185.             var driveId = new ManagementObjectSearcher("Select * from Win32_Processor");
  186.             foreach (var o in driveId.Get())
  187.             {
  188.                 var mo = (ManagementObject) o;
  189.                 st = mo["Name"].ToString();
  190.             }
  191.             return st;
  192.         }
  193.  
  194.         /// <summary>
  195.         /// CPU制造厂商
  196.         /// </summary>
  197.         /// <returns></returns>
  198.         public string GetCpuManufacturer()
  199.         {
  200.             var st = string.Empty;
  201.             var mos = new ManagementObjectSearcher("Select * from Win32_Processor");
  202.             foreach (var o in mos.Get())
  203.             {
  204.                 var mo = (ManagementObject) o;
  205.                 st = mo["Manufacturer"].ToString();
  206.             }
  207.             return st;
  208.         }
  209.  
  210.         /// <summary>
  211.         /// 主板制造厂商
  212.         /// </summary>
  213.         /// <returns></returns>
  214.         public string GetBoardManufacturer()
  215.         {
  216.             var query = new SelectQuery("Select * from Win32_BaseBoard");
  217.             var mos = new ManagementObjectSearcher(query);
  218.             var data = mos.Get().GetEnumerator();
  219.             data.MoveNext();
  220.             var board = data.Current;
  221.             return board.GetPropertyValue("Manufacturer").ToString();
  222.         }
  223.  
  224.         /// <summary>
  225.         /// 主板编号
  226.         /// </summary>
  227.         /// <returns></returns>
  228.         public string GetBoardId()
  229.         {
  230.             var st = string.Empty;
  231.             var mos = new ManagementObjectSearcher("Select * from Win32_BaseBoard");
  232.             foreach (var o in mos.Get())
  233.             {
  234.                 var mo = (ManagementObject) o;
  235.                 st = mo["SerialNumber"].ToString();
  236.             }
  237.             return st;
  238.         }
  239.  
  240.         /// <summary>
  241.         /// 主板型号
  242.         /// </summary>
  243.         /// <returns></returns>
  244.         public string GetBoardType()
  245.         {
  246.             var st = string.Empty;
  247.             var mos = new ManagementObjectSearcher("Select * from Win32_BaseBoard");
  248.             foreach (var o in mos.Get())
  249.             {
  250.                 var mo = (ManagementObject) o;
  251.                 st = mo["Product"].ToString();
  252.             }
  253.             return st;
  254.         }


如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛

发表评论 (9686人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
昵称:
最新评论
2020年07月17日 11:27111

good
very good

------分隔线----------------------------

快速入口

· 365软件
· 杰创官网
· 建站工具
· 网站大全

其它栏目

· 建站教程
· 365学习

业务咨询

· 技术支持
· 服务时间:9:00-18:00
365建站网二维码

Powered by 365建站网 RSS地图 HTML地图

copyright © 2013-2024 版权所有 鄂ICP备17013400号