C#获取电脑系统信息和硬件信息,兼容XP/Win7/Win10(依赖System.Management.dll)
文章目录
- 一、前言
- 二、具体实现
- 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 API
的GetSystemInfo
接口来获取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)相关推荐
- 如何通过 .NETCore 获取 Linux,Mac 的硬件信息?
咨询区 Pascal Jackson: 请问我如何通过 .NET Core 去识别 Linux/Mac 电脑上的硬件信息?在 windows 上我可以通过 System.Management 下 WM ...
- 获取计算机中的硬件信息
在项目开发过程中,经常会需要读取所在计算机的硬件信息,包括CPU的序列号,主板的序列号,硬盘的序列号,MAC地址,IP地址,用户名,系统类型,计算机名称,操作系统类型,物理内存大小,BIOS内容等. ...
- 如何查看linux系统的存储空间大小,linux 如何查看硬盘大小,存储空间大小等系统信息及硬件信息...
一.linux CPU大小 [root@idc ~]# cat /proc/cpuinfo |grep "model name" && cat /proc/cpui ...
- 非ie获取当前登录计算机用户,Web系统通过EXE文件实现读取客户电脑MAC等硬件信息且兼容非IE浏览器...
对于一般情况来说,我们用得最多的可能是使用ActiveX控件的方法来实现,但此方案只适用于IE浏览器.为了能兼容不同的浏览器,如FireFox等,我们就需要考虑到一种比较通用的方法.此方法我们可以参考 ...
- linux检查系统硬件信息命令,Linux查看系统信息(硬件信息, 系统设置信息等) 命令 | Soo Smart!...
Linux 查看系统信息命令是linux初学者必备的基础知识, 这些命令也非常有用, 因为进入linux第一件事就可能是首先查看系统信息, 因此必要的系统的学习一下这些linux系统信息命令还是非常有 ...
- xp计算机能装win系统吗,自己用的电脑要装系统,XP, Win7, Win10到底选哪个?解救小白篇...
对于小白来说现在新买的电脑不知道装什么系统?旧电脑想装win7,win10不知道能不能装?为了让大家能更好的了解这三个系统,我这里从几个方面做一下对比: XP.Windows7和Windows10都是 ...
- C# 获取移动硬盘和U盘信息
获取移动硬盘和U盘信息 1.首先引入名称空间 System.Management 2.示例代码如下 using System; using System.Management;namespace Co ...
- c# 读取硬件信息并进行加密绑定
文章目录 声明 流程 1.读取硬件信息 2.加密 3. 解密 声明 如果你也有兴趣或者想找作者聊聊,欢迎留言或发送邮件至:dreamdonghui@163.com 作者还拥有个人公众号,会写一些管理. ...
- linux查看电脑硬件信息,Linux下查看电脑硬件配置【转】
系统 # uname -a # 查看内核/操作系统/CPU信息 uname 命令可用于大多数 UNIX 和类 UNIX 系统以及 Linux. 功能说明:uname用来获取电脑和操作系统的相关信息. ...
最新文章
- windows10小鹤双拼注册表
- 文件对比工具Beyond Compare的使用(入门)
- python求1+2+3+....+100的和注意事项_python006(求1-2+3-4+5.....99的所有数的和)
- Stack Overflow 2016年对50,000名开发人员进行的调查得出的见解
- 前端学习(2052)vue之电商管理系统电商系统之配置http服务
- Jquery学习总结(2)——jQuery Ajax用法详解
- RecyclerView.ItemDecoration 间隔线
- tsd3dmapper软件使用方法_mybatis-plus的使用 ------ 入门
- 深度装机大师一键重装_deep深度装机大师一键安装Win10 64位旗舰版
- windows美化指南秒变mac风格
- 苹果id登陆不上去怎么回事_shopee虾皮台湾站 app怎么登陆不上去,shopee虾皮台湾站app最新版...
- 极域电子教室功能讲解-电子教室
- 微信小程序之去除抖音、快手等视频平台水印!
- 40几岁读研究生计算机,年近四十岁,还有必要去考研和继续考博吗?不建议考全日制研究生...
- python opendr_《网络工程师的Python之路》出书了!
- php get defined,php中get_defined_constants函数用法实例分析
- 软件工程考C语言的学校,软件考研学校排名,软件工程性价比较高的考研学校有哪些?...
- 智能领域的竞争不在于干了啥,而是干成啥
- 论文解读(NWR)《Graph Auto-Encoder via Neighborhood Wasserstein Reconstruction》
- ptcms模板自动采集小说系统源码
热门文章
- Spring事务管理 | 数据库连接池流程原理分析
- 如何将视频转换成gif动态图?教你两种快速将视频转gif的方法
- (四)MkDocs学习——自定义主题
- java后端视频流接口和前端video标签
- linux minit工作环境搭建
- 《机械制造业智能工厂规划设计》——3.3 机械制造业智能工厂总体框架
- 关于“泛仪器接口-网络接口”的讨论
- java mail 发送qq以及网易邮件
- Unity 小米VR一体机开发(一)
- error: 'lianxi/' does not have a commit checked out fatal: adding files failed 解决方案