C#程序中获取电脑硬件配置信息的一种方法
本文介绍获取cpu信息和内存信息的方法,根据本文所举例的代码可以举一反三获取更多信息。
获取cpu名称的方法:
public string GetCpuInfo() { ManagementObjectSearcher searcher = new ManagementObjectSearcher(@"root\CIMV2", "SELECT * FROM Win32_Processor"); foreach (ManagementObject obj2 in searcher.Get()) { try { return (obj2.GetPropertyValue("Name").ToString()); } catch { continue; } } return "未知"; }
obj2的属性名为Name的属性值输出的是cpu的名称,如intel的cpu就会返回之类的字符串。当然也可以获取其他信息,但是我们不知道属性名,又很难查到此类资料,怎么办呢?很简单,可以遍历obj的所有属性,将他们的名称打印出来即可。
获取内存信息的方法:
public string GetMemoryInfo() { ManagementObjectSearcher searcher = new ManagementObjectSearcher(); //用于查询一些如系统信息的管理对象 searcher.Query = new SelectQuery("Win32_PhysicalMemory ", "", new string[] { "Capacity" });//设置查询条件 ManagementObjectCollection collection = searcher.Get(); //获取内存容量 ManagementObjectCollection.ManagementObjectEnumerator em = collection.GetEnumerator(); long capacity = 0; while (em.MoveNext()) { ManagementBaseObject baseObj = em.Current; if (baseObj.Properties["Capacity"].Value != null) { try { capacity += (long.Parse(baseObj.Properties["Capacity"].Value.ToString())) / 1024 / 1024 / 1024; } catch { capacity = 0; } } } searcher.Query = new SelectQuery("Win32_PhysicalMemory ", "", new string[] { "Speed" });//设置查询条件 collection = searcher.Get(); //获取内存速度(即频率) em = collection.GetEnumerator(); string speed = ""; while (em.MoveNext()) { ManagementBaseObject baseObj = em.Current; if (baseObj.Properties["Speed"].Value != null) { try { speed = baseObj.Properties["Speed"].Value.ToString(); } catch { speed = ""; } } } string mi = ""; if (capacity > 0 && speed.Length > 0) { mi = capacity.ToString() + " GB, " + speed + " MHz"; } return mi; }
内存相对复杂一点,因为可能会有多条内存。明眼人看到获取cpu信息的代码时应该能看出,获取这些硬件配置信息,其实就是查询系统中保存这些信息的数据库。查询cpu时会返回实际线程数个cpu,如四核八线程就会查询到8条记录,由于多数pc只有一个cpu,所以只要找到哪一条记录中含有cpu的名称数据,就可以返回值。对于内存来说,读到的每一条记录只是一条内存的数据,要得知内存总容量就要将每一条的容量加起来。同样,内存的信息不只有容量,其频率信息如何获取也在上述代码中呈现。
如果读者是通过搜索引擎找到这篇文章,想必是急忙复制了代码去检查实现结果了。这时候你们就会遇到一个问题,代码中很多类名下面有红色波浪线,也无法快速添加如下引用:
using System.Management;
下面讲下添加方法:
1.上面的截图来自于“解决方案资源管理器”,默认是在代码编辑器右边,如果没有出现,那么请点击“视图”->”解决方案资源管理器“,打开它。
2.在项目的子项中找到引用,右键再点击添加引用。
3.在弹出的对话框中找到并勾选System.Management.dll
4.确认后再次尝试添加using,好了,这次没有红色波浪线了吧。