当前位置: 首页 > article >正文

使用C#获取系统关键信息:CPU、内存、硬盘、用户与网络状态

在C#中,获取系统信息如CPU、内存、硬盘、用户以及网络状态等,可以通过多种方式实现,包括使用System.Management命名空间中的类来查询WMI(Windows Management Instrumentation)信息,或者使用.NET Framework自带的类库。以下是一些基本示例来展示如何获取这些信息。

1. 引入必要的命名空间

首先,确保项目中引入了必要的命名空间。对于WMI查询,需要引入System.Management

using System;
using System.Management; // 需要添加对System.Management的引用
using System.Collections.Generic;

2. 获取CPU信息

ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_Processor");

foreach (ManagementObject obj in searcher.Get())
{
    Console.WriteLine("Name: " + obj["Name"]);
    Console.WriteLine("CurrentClockSpeed: " + obj["CurrentClockSpeed"]);
    // 还可以获取更多属性,如NumberOfCores, NumberOfLogicalProcessors等
}

3. 获取内存信息

ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMemory");

foreach (ManagementObject obj in searcher.Get())
{
    Console.WriteLine("Capacity: " + obj["Capacity"]);
    // 注意Capacity的单位是字节,可能需要转换成KB、MB或GB
}

// 获取总物理内存(MB)
ManagementObjectSearcher mos = new ManagementObjectSearcher("SELECT TotalVisibleMemorySize FROM Win32_OperatingSystem");
foreach (ManagementObject mo in mos.Get())
{
    Console.WriteLine("Total Physical Memory: " + (Convert.ToDouble(mo["TotalVisibleMemorySize"]) / 1024 / 1024) + " MB");
}

4. 获取硬盘信息

ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDisk WHERE DriveType=3"); // 3 代表本地硬盘

foreach (ManagementObject mo in searcher.Get())
{
    Console.WriteLine("Disk Name: " + mo["Name"]);
    Console.WriteLine("Total Size: " + (Convert.ToDouble(mo["Size"]) / 1024 / 1024 / 1024) + " GB");
    Console.WriteLine("Free Space: " + (Convert.ToDouble(mo["FreeSpace"]) / 1024 / 1024 / 1024) + " GB");
}

5. 获取当前用户信息

通常,获取当前登录的用户信息不需要WMI,可以使用.NET Framework的类。

System.Security.Principal.WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurrent();
System.Security.Principal.WindowsPrincipal principal = new System.Security.Principal.WindowsPrincipal(identity);

// 在Windows Vista及以上版本,可以使用IsInRole来判断用户是否属于某个组
bool isAdmin = principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator);

Console.WriteLine("User Name: " + identity.Name);
Console.WriteLine("Is Admin: " + isAdmin);

6. 获取网络状态

获取网络状态比较复杂,因为涉及到多个方面,如网络接口、IP地址、是否连接等。以下是一个获取网络接口列表的示例。

ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapter WHERE NetConnectionStatus = 2"); // 2 代表已连接

foreach (ManagementObject obj in searcher.Get())
{
    Console.WriteLine("Adapter Name: " + obj["Name"]);
    // 可以获取更多属性,如MAC地址、IP地址等
}

注意:WMI查询可能需要管理员权限,特别是在访问某些敏感信息时。

此外,对于网络状态的详细查询(如IP地址、DNS信息等),可能需要使用Win32_NetworkAdapterConfiguration类或其他相关WMI类。


http://www.kler.cn/a/350164.html

相关文章:

  • 使用Sum计算Loss和解决梯度累积(Gradient Accumulation)的Bug
  • Creo许可证激活失败原因及解决办法
  • UDP協議與代理IP介紹
  • AUTOSAR OS模块详解(三) Alarm
  • ThinkPHP 8的多对多关联
  • PyCharm+RobotFramework框架实现UDS自动化测试- (四)项目实战0x10
  • STM32 输入捕获模式详解:PWM 输入捕获与 PWI 模式(续篇)
  • 【C++】—通俗易懂的理解C++中的模板
  • css中 global 和 deep(两个样式穿透) 区别
  • 堡垒机——基础
  • Educational Codeforces Round 170 D 题纯 DP 思路
  • 新兴的安全职业挑战
  • 滚雪球学Redis[4.3讲]:Redis Cluster的架构与优化探究:从原理到实践
  • 【Rockchip android10 Root Permission root权限】
  • 30 天 Python 3 学习计划
  • 【Flutter】Dart:泛型
  • TDD(测试驱动开发)是否已死?
  • LabVIEW提高开发效率技巧----事件触发模式
  • MFC给编辑框(Edit)控件增加文件拖入的支持
  • LabVIEW离心泵监测系统
  • 如何使用ssm实现超市管理系统
  • C语言[函数调用数据传输]
  • itertools.chain() 函数详解
  • 从RNN讲起(RNN、LSTM、GRU、BiGRU)——序列数据处理网络
  • 《鸟哥的Linux私房菜基础篇》---2 Linux的档案与目录
  • C++一个很好的计时方法