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

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

时间:2024-10-12 08:51:13浏览次数:3  
标签:1024 Console 获取 C# System ManagementObjectSearcher WriteLine 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类。

标签:1024,Console,获取,C#,System,ManagementObjectSearcher,WriteLine,CPU,硬盘
From: https://blog.csdn.net/x1234w4321/article/details/142379842

相关文章

  • [ARC119E] Pancakes
    题意定义一个序列的权值为相邻两项的差的绝对值,你可以翻转一次\([l,r]\)并使得权值最小。\(n\le3\times10^5\)。Sol显然考虑翻转一次\([i,j]\)的方案。当前贡献便为:\[|a_{i-1}-a_{j}|+|a_{j+1}-a_{i}|-|a_{i-1}-a_{i}|-|a_{j+1}-j|\]但......
  • C#设计模式详解:从简单工厂到抽象工厂
    在C#中,简单工厂(SimpleFactory)和抽象工厂(AbstractFactory)是两种常用的设计模式,它们都属于创建型设计模式,用于创建对象而无需在代码中显式指定具体的类。尽管它们的目的相似,但在复杂性和灵活性方面存在显著差异。简单工厂(SimpleFactory)简单工厂模式是一种不属于GoF(四人帮......
  • 2023 Benelux Algorithm Programming Contest (BAPC 23)
    A-\texttt题意\(n\)个软件包,已知大小,可以同时下载\(k\)个,已经下载好了\(m\)个,选\(k\)个下载使得下载完后进度最大,输出已完成进度所占百分比。思路选最大的\(m+k\)个。代码点击查看代码#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongvoid......
  • R语言使用randomForest包中的randomForest函数构建随机森林模型、使用importance函数
    R语言使用randomForest包中的randomForest函数构建随机森林模型、使用importance函数查看特征重要度、使用table函数计算混淆矩阵评估分类模型性能、包外错误估计OOB(out-of-bagerrorestimate)目录R语言使用randomForest包中的randomForest函数构建随机森林模型(Randomfores......
  • electron-vite_4使用WebContentsView快速集成已有项目
    Web嵌入官方推荐使用WebContentsView;集成也比较简单,但还是需要你单独写点东西;src/main/index.ts进行修改import{app,shell,BrowserWindow,ipcMain,nativeImage,WebContentsView,dialog}from'electron';functioncreateWindow():void{//1.创建br......
  • electron-vite_6js-cookie失效
    我们项目是用了js-cookie,后续集成的时候发现,无法进入首页;经过排查是js-cookie无法使用,可能是electron打包后的项目运行的时候是file:///猜测原因:因为Cookie是与域名相关联的,而file:///协议没有域名,因此Cookie可能无法正常工作。file:///C:/Users/Administrator/AppData/......
  • 【AN】Adobe Animate多媒体创作和电脑动画程序win/mac下载安装
    目录AdobeAN软件功能AdobeAN软件下载与安装下载:安装:AdobeAN软件功能AdobeAN软件,全称AdobeAnimate,是一款由AdobeSystems开发的功能强大的多媒体创作和电脑动画程序。以下是其主要功能概述:动画制作:2D及简单3D动画:AdobeAnimate能够轻松创建高质量的2D动画,并支持......
  • 微软发布Windows 11 2024更新,新型Copilot+ AI PC功能亮相
    前言微软在Windows11的2024更新中加强了对人工智能的应用,推出了新功能Copilot+。此次更新的版本号为26100.1742,Copilot+将首先在WindowsInsider中推出,计划于11月向特定设备和市场推广,用户需开启“尽快获取最新更新”选项以接收此更新。系统获取https://pan.xunlei.com......
  • LeetCode题练习与总结:单词规律--290
    一、题目描述给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 s 中的每个非空单词之间存在着双向连接的对应规律。示例1:输入:pattern="abba",s="dogcatcatdog"输出:tr......
  • const与一级指针
    const与一级指针在C/C++中,const关键字用于表示一个变量的值是不可改变的。通常,它修饰离它最近的类型,意思是它所修饰的部分不能被修改。根据它在声明中的位置,const可以修饰指针或者指针所指向的值。1.const修饰变量如果const修饰变量,则该变量是常量,不能被修改。con......