博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#获取电脑型号、系统版本、内存大小、硬盘大小、CPU信息
阅读量:6998 次
发布时间:2019-06-27

本文共 9533 字,大约阅读时间需要 31 分钟。

摘要

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

方法

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

gwmi + windows api 

如图所示

对应的c#代码为

///         /// 获取硬盘容量        ///         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枚举

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

Computer类

///     /// 电脑信息类 单例    ///     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;        }        ///         /// 查找cpu的名称,主频, 核心数        ///         /// 
public Tuple
GetCPU() { Tuple
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
(parts[0].Split('-')[0] + "处理器", parts[1]); break; } } catch { } return result; } ///
/// 获取cpu核心数 /// ///
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; } ///
/// 获取系统内存大小 /// ///
内存大小(单位M)
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); } ///
/// 获取硬盘容量 /// 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; } ///
/// 电脑型号 /// 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; } ///
/// 获取分辨率 /// 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; } ///
/// 显卡 芯片,显存大小 /// public Tuple
GetVideoController() { Tuple
result = null; try { ManagementClass hardDisk = new ManagementClass(WindowsAPIType.Win32_VideoController.ToString()); ManagementObjectCollection hardDiskC = hardDisk.GetInstances(); foreach (ManagementObject m in hardDiskC) { result = new Tuple
(m[WindowsAPIKeys.VideoProcessor.ToString()].ToString() .Replace("Family", ""), CommonUtlity.ToGB(Convert.ToInt64(m[WindowsAPIKeys.AdapterRAM.ToString()].ToString()), 1024.0)); break; } } catch { } return result; } ///
/// 操作系统版本 /// 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的,这点需要注意。

转化方法:

///           /// 将字节转换为GB        ///           /// 字节值          /// 除数,硬盘除以1000,内存除以1024          /// 
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]; }

转载于:https://www.cnblogs.com/wolf-sun/p/7153984.html

你可能感兴趣的文章
.net判断System.Data.DataRow中是否包含某列
查看>>
Design T-Shirt 排序
查看>>
javaweb项目中关于配置文件web.xml的解析
查看>>
循环语句
查看>>
noip rp++
查看>>
大数加法 (A + B Problem II)
查看>>
Are you sure you want to continue connecting etc ssh ssh_config StrictHostKeyChecking no
查看>>
草稿--cgi
查看>>
同步,异步,阻塞,非阻塞
查看>>
文件缓存
查看>>
bash Shell 中如何实现条件判断之if判断
查看>>
linux守护进程解读
查看>>
Windows操作系统单文件夹下到底能存放多少文件及单文件的最大容量
查看>>
POJ2079:Triangle——题解
查看>>
关于UITableView 不能回调 tableView: cellForRowAtIndexPath的问题
查看>>
linux 批量创建用户获取8位随机密码
查看>>
WPF 单实例应用程序
查看>>
解决wordpress无法发送邮件的问题|配置好WP-Mail-SMTP的前提
查看>>
debian包之间的关系
查看>>
php生成随机数mt_rand和rand
查看>>