zoukankan      html  css  js  c++  java
  • C#程序中获取电脑硬件配置信息的一种方法

    本文介绍获取cpu信息和内存信息的方法,根据本文所举例的代码可以举一反三获取更多信息。

    获取cpu名称的方法:

            public string GetCpuInfo()
            {
                ManagementObjectSearcher searcher = new ManagementObjectSearcher(@"rootCIMV2", "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,好了,这次没有红色波浪线了吧。

  • 相关阅读:
    【Linux技术】常用的Linux系统调用
    【Linux技术】Windows与Linux系统下的库·初探
    【C/C++】嵌入式程序员应该知道的0X10个C语言问题
    【C/C++】struct探索·extern "C"含义探索 ·C++与C的混合编程·C 语言高效编程的几招
    【Acm】八皇后问题
    【驱动】linux设备驱动·扫盲
    【驱动】linux设备驱动·字符设备驱动开发
    【教程】ubuntu下配置nvc详细教程
    【教程】InstallShield使用完全教程
    【ARM】2410裸机系列-流水灯
  • 原文地址:https://www.cnblogs.com/in4ight/p/5810544.html
Copyright © 2011-2022 走看看