目前我了解的获取硬件信息主要有三种方式,具体如下:

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获取计算器硬件信息相关推荐

  1. C#获取电脑硬件信息(CPU ID、主板ID、硬盘ID、BIOS编号

    C#获取电脑硬件信息(CPU ID.主板ID.硬盘ID.BIOS编号 http://www.cnblogs.com/liufei88866/archive/2010/05/11/1732671.htm ...

  2. c# 获取电脑硬件信息通用查询类[测试通过]

    C#获取电脑硬件信息通用类[Computer]代码展示和分析,简介如下: 1.项目中添加System.Management引用. 2.添加类Computer,把下面代码全选,复制,粘贴. 3.使用方法 ...

  3. python获取系统硬件信息

    python获取系统硬件信息 github项目 https://github.com/giampaolo/psutil cpu,内存,etc.

  4. python获取电脑硬件信息_Python实现的读取电脑硬件信息功能示例

    本文实例讲述了Python实现的读取电脑硬件信息功能.分享给大家供大家参考,具体如下: 上学那会,老师让我用java获取电脑硬件信息,CPU, 硬盘,MAC等,那个时候感觉搞了好久...... 今天, ...

  5. Python获取电脑硬件信息及状态的实现方法

    From: http://www.jb51.net/article/54470.htm 这篇文章主要介绍了Python获取电脑硬件信息及状态的实现方法,是一个很实用的技巧,需要的朋友可以参考下 本文以 ...

  6. 使用WMI编程获取主机硬件信息(CPU_ID,硬盘、主板、BIOS序列号,Mac地址)

    最近在公司实习,有个应用需要获取windows主机的一些硬件信息,在网上查阅了一些资料,大部分都是使用WMI编程来实现的. 因此小菜鸟自己也用WMI实现了一下,封装为函数GetUserInfo(),具 ...

  7. lshw linux_Linux lshw命令–获取Linux硬件信息

    lshw linux Linux lshw command lists all the hardware configuration of the system. Linux lshw命令列出了系统的 ...

  8. js怎么获取电脑硬件信息

    转载自品略图书馆 http://www.pinlue.com/article/2020/07/1708/2211037430301.html 想知道怎么获取电脑的硬件信息吗,下面是小编带来js怎么获取 ...

  9. Android -- 获取设备硬件信息

    Android – 获取设备硬件信息 通过 Build 获取指定字段信息: 信息 方法 例子 主板 Build.BOARD PAR 系统定制商 Build.BRAND HUAWEI 硬件名称 Buil ...

最新文章

  1. 京东金融App收集用户敏感信息?致歉来了
  2. Response对象学习
  3. 2021-10-11 二叉树,二叉搜索树及其相关23个操作 C++实现笔记(复习用,含C指针复习)
  4. Java:银行账户类
  5. JMP指令转换公式推导
  6. 后台无刷新修改字段js
  7. java实现数据库内容修改_数据库更改到Java环境中实现可持续和平
  8. 汇顶科技【软件工程师】面经
  9. python中mat函数_Python中flatten( )函数及函数用法详解
  10. hdu 3371 Connect the Cities(prim算法)
  11. 【Linux开发】【Qt开发】Qt界面键盘、触摸屏、鼠标的响应设置
  12. python自动化办公能做什么-用Python自动办公,做职场高手(完结)
  13. python游戏设计毕业论文_游戏毕业设计论文
  14. 神舟t6ti-x5刷蓝天新版BIOS教程 可提升0.5G睿频 模具N85xHKx/HJx
  15. NetBean将IDE设置导出为Zip存档
  16. deepfacelab安卓版_deepfacelab
  17. 深度之眼Pytorch打卡(六):将数据集切分成训练集、验证集和测试集的方法
  18. 还记得儿时的那片海么?
  19. 【 C++ 】日期计算器
  20. win10怎么快速锁定计算机,win10怎么快捷键锁定电脑_win10一键锁屏快捷键是什么-win7之家...

热门文章

  1. vue单页面通过prerender-spa-plugin插件进行SEO优化
  2. 解决[<Element i at 0x18a666abf08>]问题
  3. 重启宝塔redis启动失败,pid file is exits
  4. 钉钉的收费 [钉钉深圳研发团队 denny/2016.01.06/ 59888745@qq.com]
  5. 描写中秋的有哪些古诗词
  6. 服装产业发展趋势|供应链|智能制造
  7. iOS尺寸单位pt、ppi与px之间换算关系
  8. 【优化调度】基于蚁狮算法求解经济调度问题附matlab代码
  9. 打码平台破解验证码+session登陆豆瓣
  10. 趣学算法NYOJ 阿里巴巴与四十大盗