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就会返回image之类的字符串。当然也可以获取其他信息,但是我们不知道属性名,又很难查到此类资料,怎么办呢?很简单,可以遍历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;

下面讲下添加方法:

QQ截图20160826145646

1.上面的截图来自于“解决方案资源管理器”,默认是在代码编辑器右边,如果没有出现,那么请点击“视图”->”解决方案资源管理器“,打开它。

2.在项目的子项中找到引用,右键再点击添加引用。

3.在弹出的对话框中找到并勾选System.Management.dll

4.确认后再次尝试添加using,好了,这次没有红色波浪线了吧。

posted @ 2016-08-26 15:28  in4ight  阅读(1328)  评论(0编辑  收藏  举报