文章目录

  • 一、前言
  • 二、具体实现
    • 1、引入System.Management.dll
    • 2、引入命名空间
    • 3、获取系统信息
    • 4、获取CPU信息
    • 5、获取内存信息
    • 6、获取硬盘信息
    • 7、获取显卡信息
  • 三、兼容XP/Win7/Win10
  • 四、补充,Windows API:GetSystemInfo接口

一、前言

需要做一个.NET桌面应用程序,有一个功能需求:获取电脑系统信息和硬件信息。
写篇文章来讲下。

二、具体实现

1、引入System.Management.dll

右键工程引用,点击添加引用

点击浏览

找到C盘中.NETFramework目录中的System.Management.dll
比如我的是:
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v3.5\Profile\Client

具体的.NETFramework版本根据你自己的情况而定。
点击确定。

添加成功。

2、引入命名空间

using System.Management;

3、获取系统信息

ManagementClass manag = new ManagementClass("Win32_OperatingSystem");
ManagementObjectCollection managCollection = manag.GetInstances();
foreach (ManagementObject m in managCollection)
{Console.WriteLine("操作系统: " + m["Name"].ToString());
}

运行结果:

操作系统: Microsoft Windows 10 专业版|C:\windows|\Device\Harddisk0\Partition1

4、获取CPU信息

ManagementClass mcCPU = new ManagementClass("Win32_Processor");
ManagementObjectCollection mocCPU = mcCPU.GetInstances();
foreach (ManagementObject m in mocCPU)
{Console.WriteLine("CPU: " + m["Name"].ToString());
}

运行结果:

CPU: Intel(R) Core(TM) i5-4590 CPU @ 3.30GHz

5、获取内存信息

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){capacity += long.Parse(baseObj.Properties["Capacity"].Value.ToString());}
}
Console.WriteLine("内存: " + capacity / 1024 / 1024 / 1024 + "GB");

运行结果:

内存: 16GB

6、获取硬盘信息

System.IO.DriveInfo[] drives = System.IO.DriveInfo.GetDrives();
long totalFreeSpace = 0;
long totalDiskSize = 0;
foreach (var drive in drives)
{if (drive.IsReady)  //判断代码运行时 磁盘是可操作作态{totalFreeSpace += drive.AvailableFreeSpace;totalDiskSize += drive.TotalSize;}
}
Console.WriteLine(string.Format("硬盘总容量: {0} 剩余: {1}", totalDiskSize / 1024 / 1024 / 1024 + "GB", totalFreeSpace / 1024 / 1024 / 1024 + "GB"));

运行结果:

硬盘总容量: 1378GB 剩余: 870GB

7、获取显卡信息

ManagementClass manage = new ManagementClass("Win32_VideoController");
ManagementObjectCollection manageCollection = manage.GetInstances();
if (null == manageCollection)
{Console.WriteLine("显卡: 未知");
}
else
{foreach (ManagementObject m in manageCollection){if (null == m["VideoProcessor"]){Console.WriteLine("显卡: 未知");}else{Console.Write("显卡: " + m["VideoProcessor"].ToString() + " | ");var graphicsCardRam = Convert.ToInt64(m["AdapterRAM"]);if (graphicsCardRam >= 1024 * 1024 * 1024)Console.WriteLine((graphicsCardRam / 1024 / 1024 / 1024) + "GB");elseConsole.WriteLine((graphicsCardRam / 1024 / 1024) + "MB");}}
}

运行结果:

显卡: GeForce GT 740 | 2GB
显卡: Intel(R) HD Graphics Family | 1GB

三、兼容XP/Win7/Win10

将工程的目标框架改为.NET Framework 2.0版本。

四、补充,Windows API:GetSystemInfo接口

上面的方法需要引用System.Management.dll,我们可以通过Windows APIGetSystemInfo接口来获取CPU相关的信息。
C#接口声明:

[StructLayout(LayoutKind.Sequential)]
internal struct SYSTEM_INFO
{// cpu 架构: x86_64、ARM、x86、internal ushort wProcessorArchitecture;// 保留internal ushort wReserved;// 分页大小internal uint dwPageSize;// 最小寻址空间internal IntPtr lpMinimumApplicationAddress;// 最大寻址空间internal IntPtr lpMaximumApplicationAddress;// 处理器掩码; 0..31 表示不同的处理器internal IntPtr dwActiveProcessorMask;// cpu 个数internal uint dwNumberOfProcessors;// cpu 类型internal uint dwProcessorType;// 虚拟内存空间的粒度internal uint dwAllocationGranularity;// cpu 级别internal ushort wProcessorLevel;// cpu 版本internal ushort wProcessorRevision;}[DllImport("kernel32")]
static extern void GetSystemInfo(ref SYSTEM_INFO pSI);

调用

SYSTEM_INFO pSI = new SYSTEM_INFO();
GetSystemInfo(ref pSI);
FieldInfo[] fis = pSI.GetType().GetFields(BindingFlags.Instance | BindingFlags.NonPublic);
foreach (var fi in fis)
{Console.WriteLine(fi.Name + ": " + fi.GetValue(pSI));
}

运行结果:

wProcessorArchitecture: 9
wReserved: 0
dwPageSize: 4096
lpMinimumApplicationAddress: 65536
lpMaximumApplicationAddress: 140737488289791
dwActiveProcessorMask: 15
dwNumberOfProcessors: 4
dwProcessorType: 8664
dwAllocationGranularity: 65536
wProcessorLevel: 6
wProcessorRevision: 15363

参数说明:

wProcessorArchitecture:系统处理器结构。
PROCESSOR_ARCHITECTURE_AMD64 = 9; // x64
PROCESSOR_ARCHITECTURE_IA64 = 6; // Intel 服务器
PROCESSOR_ARCHITECTURE_INTEL = 0; //x86
wReserved:保留留给未来使用。
dwPageSize:页面的大小和页面保护的承若与粒度,这是通过使用virtualAlloc函数去决定页面大小。
lpMinimumApplicationAddress:最低内存地址的指针,访问应用程序和动态链接库(DLLs)
lpMaximumApplicationAddress:最高内存地址的指针,访问应用程序和动态链接库
dwActiveProcessorMask:一个代表系统中设置处理器的配置的处理器集。Bit 0 是处理器0,Bit 31是处理器31.
dwNumberOfProcessors:系统中的处理器的数目。
dwProcessorType: 系统中处理器的类型。
如下:
PROCESSOR_INTEL_386
PROCESSOR_INTEL_486
PROCESSOR_INTEL_PENTIUM
PROCESSOR_MIPS_R3000
PROCESSOR_MIPS_R4000
PROCESSOR_HITACHI_SH3
PROCESSOR_HITACHI_SH4
PROCESSOR_PPC_403
PROCESSOR_PPC_821
PROCESSOR_STRONGARM
PROCESSOR_ARM720
dwAllocationGranularity:指定粒度和虚拟内存的分配,例如一个一字节的VirtualAlloc函数请求分配将保留
wProcessorLevel:系统的体系结构相关的处理器的水平。
wProcessorRevision:基于体系结构的处理器的修订。

C#获取电脑系统信息和硬件信息,兼容XP/Win7/Win10(依赖System.Management.dll)相关推荐

  1. 如何通过 .NETCore 获取 Linux,Mac 的硬件信息?

    咨询区 Pascal Jackson: 请问我如何通过 .NET Core 去识别 Linux/Mac 电脑上的硬件信息?在 windows 上我可以通过 System.Management 下 WM ...

  2. 获取计算机中的硬件信息

    在项目开发过程中,经常会需要读取所在计算机的硬件信息,包括CPU的序列号,主板的序列号,硬盘的序列号,MAC地址,IP地址,用户名,系统类型,计算机名称,操作系统类型,物理内存大小,BIOS内容等. ...

  3. 如何查看linux系统的存储空间大小,linux 如何查看硬盘大小,存储空间大小等系统信息及硬件信息...

    一.linux CPU大小 [root@idc ~]# cat /proc/cpuinfo |grep "model name" && cat /proc/cpui ...

  4. 非ie获取当前登录计算机用户,Web系统通过EXE文件实现读取客户电脑MAC等硬件信息且兼容非IE浏览器...

    对于一般情况来说,我们用得最多的可能是使用ActiveX控件的方法来实现,但此方案只适用于IE浏览器.为了能兼容不同的浏览器,如FireFox等,我们就需要考虑到一种比较通用的方法.此方法我们可以参考 ...

  5. linux检查系统硬件信息命令,Linux查看系统信息(硬件信息, 系统设置信息等) 命令 | Soo Smart!...

    Linux 查看系统信息命令是linux初学者必备的基础知识, 这些命令也非常有用, 因为进入linux第一件事就可能是首先查看系统信息, 因此必要的系统的学习一下这些linux系统信息命令还是非常有 ...

  6. xp计算机能装win系统吗,自己用的电脑要装系统,XP, Win7, Win10到底选哪个?解救小白篇...

    对于小白来说现在新买的电脑不知道装什么系统?旧电脑想装win7,win10不知道能不能装?为了让大家能更好的了解这三个系统,我这里从几个方面做一下对比: XP.Windows7和Windows10都是 ...

  7. C# 获取移动硬盘和U盘信息

    获取移动硬盘和U盘信息 1.首先引入名称空间 System.Management 2.示例代码如下 using System; using System.Management;namespace Co ...

  8. c# 读取硬件信息并进行加密绑定

    文章目录 声明 流程 1.读取硬件信息 2.加密 3. 解密 声明 如果你也有兴趣或者想找作者聊聊,欢迎留言或发送邮件至:dreamdonghui@163.com 作者还拥有个人公众号,会写一些管理. ...

  9. linux查看电脑硬件信息,Linux下查看电脑硬件配置【转】

    系统 # uname -a # 查看内核/操作系统/CPU信息 uname 命令可用于大多数 UNIX 和类 UNIX 系统以及 Linux. 功能说明:uname用来获取电脑和操作系统的相关信息. ...

最新文章

  1. windows10小鹤双拼注册表
  2. 文件对比工具Beyond Compare的使用(入门)
  3. python求1+2+3+....+100的和注意事项_python006(求1-2+3-4+5.....99的所有数的和)
  4. Stack Overflow 2016年对50,000名开发人员进行的调查得出的见解
  5. 前端学习(2052)vue之电商管理系统电商系统之配置http服务
  6. Jquery学习总结(2)——jQuery Ajax用法详解
  7. RecyclerView.ItemDecoration 间隔线
  8. tsd3dmapper软件使用方法_mybatis-plus的使用 ------ 入门
  9. 深度装机大师一键重装_deep深度装机大师一键安装Win10 64位旗舰版
  10. windows美化指南秒变mac风格
  11. 苹果id登陆不上去怎么回事_shopee虾皮台湾站 app怎么登陆不上去,shopee虾皮台湾站app最新版...
  12. 极域电子教室功能讲解-电子教室
  13. 微信小程序之去除抖音、快手等视频平台水印!
  14. 40几岁读研究生计算机,年近四十岁,还有必要去考研和继续考博吗?不建议考全日制研究生...
  15. python opendr_《网络工程师的Python之路》出书了!
  16. php get defined,php中get_defined_constants函数用法实例分析
  17. 软件工程考C语言的学校,软件考研学校排名,软件工程性价比较高的考研学校有哪些?...
  18. 智能领域的竞争不在于干了啥,而是干成啥
  19. 论文解读(NWR)《Graph Auto-Encoder via Neighborhood Wasserstein Reconstruction》
  20. ptcms模板自动采集小说系统源码

热门文章

  1. Spring事务管理 | 数据库连接池流程原理分析
  2. 如何将视频转换成gif动态图?教你两种快速将视频转gif的方法
  3. (四)MkDocs学习——自定义主题
  4. java后端视频流接口和前端video标签
  5. linux minit工作环境搭建
  6. 《机械制造业智能工厂规划设计》——3.3 机械制造业智能工厂总体框架
  7. 关于“泛仪器接口-网络接口”的讨论
  8. java mail 发送qq以及网易邮件
  9. Unity 小米VR一体机开发(一)
  10. error: 'lianxi/' does not have a commit checked out fatal: adding files failed 解决方案