zoukankan      html  css  js  c++  java
  • C#获取电脑型号、系统版本、内存大小、硬盘大小、CPU信息

    摘要

    有时需要获取电脑的相关信息。这时可以通过调用windows api的方式,进行获取。

    方法

    可以通过在powershell中 通过下面的命令进行查询,然后可以通过c#调用获取需要的信息。

    gwmi + windows api 

    如图所示

    对应的c#代码为

      /// <summary>
            /// 获取硬盘容量
            /// </summary>
            public string GetDiskSize()
            {
                string result = string.Empty;
                StringBuilder sb = new StringBuilder();
                try
                {
                    string hdId = string.Empty;
                    ManagementClass hardDisk = new ManagementClass(WindowsAPIType.win32_DiskDrive.ToString());
                    ManagementObjectCollection hardDiskC = hardDisk.GetInstances();
                    foreach (ManagementObject m in hardDiskC)
                    {
                        long capacity = Convert.ToInt64(m[WindowsAPIKeys.Size.ToString()].ToString());
                        sb.Append(CommonUtlity.ToGB(capacity, 1000.0) + "+");
                    }
                    result = sb.ToString().TrimEnd('+');
                }
                catch
                {
    
                }
                return result;
            }

    API和Keys枚举

        /// <summary>
        /// windows api 名称
        /// </summary>
        public enum WindowsAPIType
        {
            /// <summary>
            /// 内存
            /// </summary>
            Win32_PhysicalMemory,
            /// <summary>
            /// cpu
            /// </summary>
            Win32_Processor,
            /// <summary>
            /// 硬盘
            /// </summary>
            win32_DiskDrive,
            /// <summary>
            /// 电脑型号
            /// </summary>
            Win32_ComputerSystemProduct,
            /// <summary>
            /// 分辨率
            /// </summary>
            Win32_DesktopMonitor,
            /// <summary>
            /// 显卡
            /// </summary>
            Win32_VideoController,
            /// <summary>
            /// 操作系统
            /// </summary>
            Win32_OperatingSystem
    
        }
        public enum WindowsAPIKeys
        {
            /// <summary>
            /// 名称
            /// </summary>
            Name,
            /// <summary>
            /// 显卡芯片
            /// </summary>
            VideoProcessor,
            /// <summary>
            /// 显存大小
            /// </summary>
            AdapterRAM,
            /// <summary>
            /// 分辨率宽
            /// </summary>
            ScreenWidth,
            /// <summary>
            /// 分辨率高
            /// </summary>
            ScreenHeight,
            /// <summary>
            /// 电脑型号
            /// </summary>
            Version,
            /// <summary>
            /// 硬盘容量
            /// </summary>
            Size,
            /// <summary>
            /// 内存容量
            /// </summary>
            Capacity,
            /// <summary>
            /// cpu核心数
            /// </summary>
            NumberOfCores
        }

    Computer类

        /// <summary>
        /// 电脑信息类 单例
        /// </summary>
        public class Computer
        {
            private static Computer _instance;
            private static readonly object _lock = new object();
            private Computer()
            { }
            public static Computer CreateComputer()
            {
                if (_instance == null)
                {
                    lock (_lock)
                    {
                        if (_instance == null)
                        {
                            _instance = new Computer();
                        }
                    }
                }
                return _instance;
            }
            /// <summary>
            /// 查找cpu的名称,主频, 核心数
            /// </summary>
            /// <returns></returns>
            public Tuple<string, string> GetCPU()
            {
                Tuple<string, string> result = null;
                try
                {
                    string str = string.Empty;
                    ManagementClass mcCPU = new ManagementClass(WindowsAPIType.Win32_Processor.ToString());
                    ManagementObjectCollection mocCPU = mcCPU.GetInstances();
                    foreach (ManagementObject m in mocCPU)
                    {
                        string name = m[WindowsAPIKeys.Name.ToString()].ToString();
                        string[] parts = name.Split('@');
                        result = new Tuple<string, string>(parts[0].Split('-')[0] + "处理器", parts[1]);
                        break;
                    }
    
                }
                catch
                {
    
                }
                return result;
            }
    
    
            /// <summary>
            /// 获取cpu核心数
            /// </summary>
            /// <returns></returns>
            public string GetCPU_Count()
            {
                string str = "查询失败";
                try
                {
                    int coreCount = 0;
                    foreach (var item in new System.Management.ManagementObjectSearcher("Select * from " +
    WindowsAPIType.Win32_Processor.ToString()).Get()) { coreCount += int.Parse(item[WindowsAPIKeys.NumberOfCores.ToString()].ToString()); } if (coreCount == 2) { return "双核"; } str = coreCount.ToString() + ""; } catch { } return str; } /// <summary> /// 获取系统内存大小 /// </summary> /// <returns>内存大小(单位M)</returns> public string GetPhisicalMemory() { ManagementObjectSearcher searcher = new ManagementObjectSearcher(); //用于查询一些如系统信息的管理对象 searcher.Query = new SelectQuery(WindowsAPIType.Win32_PhysicalMemory.ToString(), "",
    new string[] { WindowsAPIKeys.Capacity.ToString() });//设置查询条件 ManagementObjectCollection collection = searcher.Get(); //获取内存容量 ManagementObjectCollection.ManagementObjectEnumerator em = collection.GetEnumerator(); long capacity = 0; while (em.MoveNext()) { ManagementBaseObject baseObj = em.Current; if (baseObj.Properties[WindowsAPIKeys.Capacity.ToString()].Value != null) { try { capacity += long.Parse(baseObj.Properties[WindowsAPIKeys.Capacity.ToString()].Value.ToString()); } catch { return "查询失败"; } } } return CommonUtlity.ToGB((double)capacity, 1024.0); } /// <summary> /// 获取硬盘容量 /// </summary> public string GetDiskSize() { string result = string.Empty; StringBuilder sb = new StringBuilder(); try { string hdId = string.Empty; ManagementClass hardDisk = new ManagementClass(WindowsAPIType.win32_DiskDrive.ToString()); ManagementObjectCollection hardDiskC = hardDisk.GetInstances(); foreach (ManagementObject m in hardDiskC) { long capacity = Convert.ToInt64(m[WindowsAPIKeys.Size.ToString()].ToString()); sb.Append(CommonUtlity.ToGB(capacity, 1000.0) + "+"); } result = sb.ToString().TrimEnd('+'); } catch { } return result; } /// <summary> /// 电脑型号 /// </summary> public string GetVersion() { string str = "查询失败"; try { string hdId = string.Empty; ManagementClass hardDisk = new ManagementClass(WindowsAPIType.Win32_ComputerSystemProduct.ToString()); ManagementObjectCollection hardDiskC = hardDisk.GetInstances(); foreach (ManagementObject m in hardDiskC) { str = m[WindowsAPIKeys.Version.ToString()].ToString(); break; } } catch { } return str; } /// <summary> /// 获取分辨率 /// </summary> public string GetFenbianlv() { string result = "1920*1080"; try { string hdId = string.Empty; ManagementClass hardDisk = new ManagementClass(WindowsAPIType.Win32_DesktopMonitor.ToString()); ManagementObjectCollection hardDiskC = hardDisk.GetInstances(); foreach (ManagementObject m in hardDiskC) { result = m[WindowsAPIKeys.ScreenWidth.ToString()].ToString() + "*" +
    m[WindowsAPIKeys.ScreenHeight.ToString()].ToString();
    break; } } catch { } return result; } /// <summary> /// 显卡 芯片,显存大小 /// </summary> public Tuple<string, string> GetVideoController() { Tuple<string, string> result = null; try { ManagementClass hardDisk = new ManagementClass(WindowsAPIType.Win32_VideoController.ToString()); ManagementObjectCollection hardDiskC = hardDisk.GetInstances(); foreach (ManagementObject m in hardDiskC) { result = new Tuple<string, string>(m[WindowsAPIKeys.VideoProcessor.ToString()].ToString()
    .Replace("Family", ""), CommonUtlity.ToGB(Convert.ToInt64(m[WindowsAPIKeys.AdapterRAM.ToString()].ToString()), 1024.0)); break; } } catch { } return result; } /// <summary> /// 操作系统版本 /// </summary> public string GetOS_Version() { string str = "Windows 10"; try { string hdId = string.Empty; ManagementClass hardDisk = new ManagementClass(WindowsAPIType.Win32_OperatingSystem.ToString()); ManagementObjectCollection hardDiskC = hardDisk.GetInstances(); foreach (ManagementObject m in hardDiskC) { str = m[WindowsAPIKeys.Name.ToString()].ToString().Split('|')[0].Replace("Microsoft", ""); break; } } catch { } return str; } }

    这里只是枚举了部分api,有兴趣的可以查看其它的windows api 并通过power shell查看,然后转化为c# 代码即可。

    这里需要注意,硬盘容量在转化的时候需要除以1000,而不是1024.但内存是需要除以1024的,这点需要注意。

    转化方法:

       /// <summary>  
            /// 将字节转换为GB
            /// </summary>  
            /// <param name="size">字节值</param>  
            /// <param name="mod">除数,硬盘除以1000,内存除以1024</param>  
            /// <returns></returns>  
            public static string ToGB(double size, double mod)
            {
                String[] units = new String[] { "B", "KB", "MB", "GB", "TB", "PB" };
                int i = 0;
                while (size >= mod)
                {
                    size /= mod;
                    i++;
                }
                return Math.Round(size) + units[i];
            }
  • 相关阅读:
    Unity3D GUI图形用户界面系统
    Unity3D 自动寻路入门指南
    Unity3D 导航网格自动寻路(Navigation Mesh)
    拓展通用的冒泡排序方法
    DoTween 应用设置
    DoTween 教程
    Unity3D 脚本手册
    unity3d中获得物体的size
    Unity自动寻路Navmesh之高级
    C# 代码页获取input的值
  • 原文地址:https://www.cnblogs.com/wolf-sun/p/7153984.html
Copyright © 2011-2022 走看看