C#使用ManagementClass获取计算器硬件信息
目前我了解的获取硬件信息主要有三种方式,具体如下:
1、读取注册表。
2、使用系统API。
3、使用ManagementClass。
下面主要说说如果使用ManagementClass类来获取计算机上CPU、内存、硬盘、网卡、显示、声卡等信息。
1、新建Console控制台项目。
2、添加ManagementClass类引用。
3、定义要获取硬件类型枚举,不创建枚举类型也可以,在创建ManagementClass对象时直接传字符串。
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}
4、硬件信息是以键值对形式返回的,所以在定义要获取信息的键值枚举。
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}
5、创建获取硬件信息单例类
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;}public string GetMACString(){ManagementClass mAdapter = new ManagementClass("Win32_NetworkAdapterConfiguration");ManagementObjectCollection mo = mAdapter.GetInstances();foreach (ManagementBaseObject m in mo){if ((bool)m["IpEnabled"] == true){return m["MacAddress"].ToString();}}mo.Dispose();return null;}/// <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 int GetCpuCount(){try{using (ManagementClass mCpu = new ManagementClass("Win32_Processor")){ManagementObjectCollection cpus = mCpu.GetInstances();return cpus.Count;}}catch{}return -1;}/// <summary>/// 获取CPU的频率 这里之所以使用string类型的数组,主要是因为cpu的多核/// </summary>/// <returns></returns>public string[] GetCpuMHZ(){ManagementClass mc = new ManagementClass("Win32_Processor");ManagementObjectCollection cpus = mc.GetInstances();string[] mHz = new string[cpus.Count];int c = 0;ManagementObjectSearcher mySearch = new ManagementObjectSearcher("select * from Win32_Processor");foreach (ManagementObject mo in mySearch.Get()){mHz[c] = mo.Properties["CurrentClockSpeed"].Value.ToString();c++;}mc.Dispose();mySearch.Dispose();return mHz;}/// <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></returns> public string GetSystemType(){var st = string.Empty;var mc = new ManagementClass("Win32_ComputerSystem");var moc = mc.GetInstances();foreach (var o in moc){var mo = (ManagementObject)o;st = mo["SystemType"].ToString();}return st;}/// <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 ToGB((double)capacity, 1024.0);}/// <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];}/// <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(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){foreach (var v in m.Properties){Console.WriteLine(v.Name + " " + v.Value);//VideoModeDescription 1920 x 1080 x 4294967296 种颜色}result = new Tuple<string, string>(m[WindowsAPIKeys.VideoProcessor.ToString()].ToString()
.Replace("Family", ""), 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){foreach (var v in m.Properties){Console.WriteLine(v.Name + " " + v.Value);}str = m[WindowsAPIKeys.Name.ToString()].ToString().Split('|')[0].Replace("Microsoft", "");break;}}catch{}return str;}}
6、大家可以参考 https://www.cnblogs.com/jephone/博客,查看每种硬件信息Key-Value说明。
c#获取电脑硬件信息参数说明(硬盘篇 Win32_DiskDrive)
c#获取电脑硬件信息参数说明(CPU篇 Win32_Processor)
c#获取电脑硬件信息参数说明(概述)
C#使用ManagementClass获取计算器硬件信息相关推荐
- C#获取电脑硬件信息(CPU ID、主板ID、硬盘ID、BIOS编号
C#获取电脑硬件信息(CPU ID.主板ID.硬盘ID.BIOS编号 http://www.cnblogs.com/liufei88866/archive/2010/05/11/1732671.htm ...
- c# 获取电脑硬件信息通用查询类[测试通过]
C#获取电脑硬件信息通用类[Computer]代码展示和分析,简介如下: 1.项目中添加System.Management引用. 2.添加类Computer,把下面代码全选,复制,粘贴. 3.使用方法 ...
- python获取系统硬件信息
python获取系统硬件信息 github项目 https://github.com/giampaolo/psutil cpu,内存,etc.
- python获取电脑硬件信息_Python实现的读取电脑硬件信息功能示例
本文实例讲述了Python实现的读取电脑硬件信息功能.分享给大家供大家参考,具体如下: 上学那会,老师让我用java获取电脑硬件信息,CPU, 硬盘,MAC等,那个时候感觉搞了好久...... 今天, ...
- Python获取电脑硬件信息及状态的实现方法
From: http://www.jb51.net/article/54470.htm 这篇文章主要介绍了Python获取电脑硬件信息及状态的实现方法,是一个很实用的技巧,需要的朋友可以参考下 本文以 ...
- 使用WMI编程获取主机硬件信息(CPU_ID,硬盘、主板、BIOS序列号,Mac地址)
最近在公司实习,有个应用需要获取windows主机的一些硬件信息,在网上查阅了一些资料,大部分都是使用WMI编程来实现的. 因此小菜鸟自己也用WMI实现了一下,封装为函数GetUserInfo(),具 ...
- lshw linux_Linux lshw命令–获取Linux硬件信息
lshw linux Linux lshw command lists all the hardware configuration of the system. Linux lshw命令列出了系统的 ...
- js怎么获取电脑硬件信息
转载自品略图书馆 http://www.pinlue.com/article/2020/07/1708/2211037430301.html 想知道怎么获取电脑的硬件信息吗,下面是小编带来js怎么获取 ...
- Android -- 获取设备硬件信息
Android – 获取设备硬件信息 通过 Build 获取指定字段信息: 信息 方法 例子 主板 Build.BOARD PAR 系统定制商 Build.BRAND HUAWEI 硬件名称 Buil ...
最新文章
- 京东金融App收集用户敏感信息?致歉来了
- Response对象学习
- 2021-10-11 二叉树,二叉搜索树及其相关23个操作 C++实现笔记(复习用,含C指针复习)
- Java:银行账户类
- JMP指令转换公式推导
- 后台无刷新修改字段js
- java实现数据库内容修改_数据库更改到Java环境中实现可持续和平
- 汇顶科技【软件工程师】面经
- python中mat函数_Python中flatten( )函数及函数用法详解
- hdu 3371 Connect the Cities(prim算法)
- 【Linux开发】【Qt开发】Qt界面键盘、触摸屏、鼠标的响应设置
- python自动化办公能做什么-用Python自动办公,做职场高手(完结)
- python游戏设计毕业论文_游戏毕业设计论文
- 神舟t6ti-x5刷蓝天新版BIOS教程 可提升0.5G睿频 模具N85xHKx/HJx
- NetBean将IDE设置导出为Zip存档
- deepfacelab安卓版_deepfacelab
- 深度之眼Pytorch打卡(六):将数据集切分成训练集、验证集和测试集的方法
- 还记得儿时的那片海么?
- 【 C++ 】日期计算器
- win10怎么快速锁定计算机,win10怎么快捷键锁定电脑_win10一键锁屏快捷键是什么-win7之家...
热门文章
- vue单页面通过prerender-spa-plugin插件进行SEO优化
- 解决[<Element i at 0x18a666abf08>]问题
- 重启宝塔redis启动失败,pid file is exits
- 钉钉的收费 [钉钉深圳研发团队 denny/2016.01.06/ 59888745@qq.com]
- 描写中秋的有哪些古诗词
- 服装产业发展趋势|供应链|智能制造
- iOS尺寸单位pt、ppi与px之间换算关系
- 【优化调度】基于蚁狮算法求解经济调度问题附matlab代码
- 打码平台破解验证码+session登陆豆瓣
- 趣学算法NYOJ 阿里巴巴与四十大盗