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,好了,这次没有红色波浪线了吧。

  • 相关阅读:
    ASP.NET WebAPI2 发布之后404 Not Found
    WPF MVVM TreeView 实现 右键选中 右键菜单
    Asp.Net MVC4+EF6 Code First 权限管理系统 源码下载
    C# Winform DataGrid 绑定List<> Or ObservableCollection<> 类型无法自动刷新问题
    VMWare 安装时报错 tools-windows.msi failed报错解决办法
    HashMap 扩容机制
    POI解析Excel封装工具
    poi API
    简单echars说明和使用
    比较运算符compareTo()、equals()、==之间的区别
  • 原文地址:https://www.cnblogs.com/in4ight/p/5810544.html
Copyright © 2011-2022 走看看