admin管理员组文章数量:1587262
文章目录
- 一、前言
- 二、具体实现
- 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");
else
Console.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#获取电脑系统信息和硬件信息,兼容XPWin7Win10(依赖System.Management.dll) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1728010192a1141855.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论