本文通过一个Demo,讲解如何通过C#获取操作系统相关的信息,如内存大小,CPU大小,机器名,环境变量等操作系统软件、硬件相关信息,仅供学习分享使用,如有不足之处,还请指正。

涉及知识点:

  • Environment 提供有关当前环境和平台的信息以及操作它们的方法。
  • ManagementClass 表示公共信息模型 (CIM) 管理类。管理类是一个 WMI 类,如 Win32_LogicalDisk 和 Win32_Process,前者表示磁盘驱动器,后者表示进程(如 Notepad.exe)。通过该类的成员,可以使用特定的 WMI 类路径访问 WMI 数据。

效果图

系统信息 :获取如系统目录,平台标识,登录用户名,盘符,所在的域 等信息

环境变量:即操作系统运行的参数,看看有没有眼前为之一亮的信息

特殊目录:桌面,我的文档,收藏夹,等目录,是不是很熟悉

操作系统:以下是获取CPU的信息,如型号,名称,个数,速度,厂商等信息【还可以获取其他如内存,硬盘等信息】

核心代码

代码如下:

 namespace DemoEnvironment
{
public partial class MainFrom : Form
{
public MainFrom()
{
InitializeComponent();
} private void MainFrom_Load(object sender, EventArgs e)
{
string machineName = Environment.MachineName;
string osVersionName = GetOsVersion(Environment.OSVersion.Version);
string servicePack = Environment.OSVersion.ServicePack;
osVersionName = osVersionName + " " + servicePack;
string userName = Environment.UserName;
string domainName = Environment.UserDomainName;
string tickCount = (Environment.TickCount / ).ToString() + "s";
string systemPageSize = (Environment.SystemPageSize / ).ToString() + "KB";
string systemDir = Environment.SystemDirectory;
string stackTrace = Environment.StackTrace;
string processorCounter = Environment.ProcessorCount.ToString();
string platform = Environment.OSVersion.Platform.ToString();
string newLine = Environment.NewLine;
bool is64Os = Environment.Is64BitOperatingSystem;
bool is64Process = Environment.Is64BitProcess; string currDir = Environment.CurrentDirectory;
string cmdLine = Environment.CommandLine;
string[] drives = Environment.GetLogicalDrives();
//long workingSet = (Environment.WorkingSet / 1024);
this.lblMachineName.Text = machineName;
this.lblOsVersion.Text = osVersionName;
this.lblUserName.Text = userName;
this.lblDomineName.Text = domainName;
this.lblStartTime.Text = tickCount;
this.lblPageSize.Text = systemPageSize;
this.lblSystemDir.Text = systemDir;
this.lblLogical.Text = string.Join(",", drives);
this.lblProcesserCounter.Text = processorCounter;
this.lblPlatform.Text = platform;
this.lblNewLine.Text = newLine.ToString();
this.lblSystemType.Text = is64Os ? "64bit" : "32bit";
this.lblProcessType.Text = is64Process ? "64bit" : "32bit";
this.lblCurDir.Text = currDir;
this.lblCmdLine.Text = cmdLine;
this.lblWorkSet.Text = GetPhisicalMemory().ToString()+"MB";
//环境变量
// HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment
IDictionary dicMachine = Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Machine);
this.rtbVaribles.AppendText(string.Format("{0}: {1}", "机器环境变量", newLine));
foreach (string str in dicMachine.Keys) {
string val = dicMachine[str].ToString();
this.rtbVaribles.AppendText(string.Format("{0}: {1}{2}", str, val, newLine));
}
this.rtbVaribles.AppendText(string.Format("{0}{1}", ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", newLine));
// 环境变量存储在 Windows 操作系统注册表的 HKEY_CURRENT_USER\Environment 项中,或从其中检索。
IDictionary dicUser = Environment.GetEnvironmentVariables(EnvironmentVariableTarget.User);
this.rtbVaribles.AppendText(string.Format("{0}: {1}", "用户环境变量", newLine));
foreach (string str in dicUser.Keys)
{
string val = dicUser[str].ToString();
this.rtbVaribles.AppendText(string.Format("{0}: {1}{2}", str, val, newLine));
}
this.rtbVaribles.AppendText(string.Format("{0}{1}", ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", newLine));
IDictionary dicProcess = Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Process);
this.rtbVaribles.AppendText(string.Format("{0}: {1}", "进程环境变量", newLine));
foreach (string str in dicProcess.Keys)
{
string val = dicProcess[str].ToString();
this.rtbVaribles.AppendText(string.Format("{0}: {1}{2}", str, val, newLine));
}
//特殊目录
string[] names = Enum.GetNames(typeof(Environment.SpecialFolder));
foreach (string name in names){ Environment.SpecialFolder sf;
if (Enum.TryParse<Environment.SpecialFolder>(name, out sf))
{
string folder = Environment.GetFolderPath(sf);
this.rtbFolders.AppendText(string.Format("{0}: {1}{2}", name, folder, newLine));
}
}
//获取其他硬件,软件信息
GetPhicnalInfo();
} private string GetOsVersion(Version ver) {
string strClient = "";
if (ver.Major == && ver.Minor == )
{
strClient = "Win XP";
}
else if (ver.Major == && ver.Minor == )
{
strClient = "Win Vista";
}
else if (ver.Major == && ver.Minor == )
{
strClient = "Win 7";
}
else if (ver.Major == && ver.Minor == )
{
strClient = "Win 2000";
}
else
{
strClient = "未知";
}
return strClient;
} /// <summary>
/// 获取系统内存大小
/// </summary>
/// <returns>内存大小(单位M)</returns>
private int GetPhisicalMemory()
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher(); //用于查询一些如系统信息的管理对象
searcher.Query = new SelectQuery("Win32_PhysicalMemory ", "", new string[] { "Capacity" });//设置查询条件
ManagementObjectCollection collection = searcher.Get(); //获取内存容量
ManagementObjectCollection.ManagementObjectEnumerator em = collection.GetEnumerator(); long capacity = ;
while (em.MoveNext())
{
ManagementBaseObject baseObj = em.Current;
if (baseObj.Properties["Capacity"].Value != null)
{
try
{
capacity += long.Parse(baseObj.Properties["Capacity"].Value.ToString());
}
catch
{
return ;
}
}
}
return (int)(capacity / / );
} /// <summary>
/// https://msdn.microsoft.com/en-us/library/aa394084(VS.85).aspx
/// </summary>
/// <returns></returns>
private int GetPhicnalInfo() {
ManagementClass osClass = new ManagementClass("Win32_Processor");//后面几种可以试一下,会有意外的收获//Win32_PhysicalMemory/Win32_Keyboard/Win32_ComputerSystem/Win32_OperatingSystem
foreach (ManagementObject obj in osClass.GetInstances())
{
PropertyDataCollection pdc = obj.Properties;
foreach (PropertyData pd in pdc) {
this.rtbOs.AppendText(string.Format("{0}: {1}{2}", pd.Name, pd.Value, "\r\n"));
}
}
return ;
}
}
}

工程下载

小例子,小知识 ,积跬步以至千里, 积小流以成江海。

C# 获取操作系统相关的信息的更多相关文章

  1. 使用ttXactAdmin、ttSQLCmdCacheInfo、ttSQLCmdQueryPlan获取SQL相关具体信息[TimesTen运维]

    使用ttXactAdmin.ttSQLCmdCacheInfo.ttSQLCmdQueryPlan获取SQL相关具体信息,适合于tt11以上版本号. $ ttversion TimesTen Rele ...

  2. C# 获取操作系统相关信息

    1.获取操作系统版本(PC,PDA均支持) Environment.OSVersion 2.获取应用程序当前目录(PC支持) Environment.CurrentDirectory 3.列举本地硬盘 ...

  3. ios 获取设备相关的信息

    .获取设备的信息 UIDevice *device = [[UIDevice alloc] int]; NSString *name = device.name; //获取设备所有者的名称 NSStr ...

  4. Java 获取操作系统相关的内容

    package com.hikvision.discsetup.util; import java.lang.reflect.Field; import java.net.InetAddress; i ...

  5. ios 获取手机相关的信息

    获取手机信息      应用程序的名称和版本号等信息都保存在mainBundle的一个字典中,用下面代码可以取出来 //获取版本号 NSDictionary *infoDict = [[NSBundl ...

  6. snmp获取设备相关管理信息

    在本文中,作者将向我们展示如何用snmp代理监视网络设备,甚至发送软件警告. 网络上很多代理在为我们服务.只要我们开启UDP/161,162端口,这些代理就会以Management Informati ...

  7. C# 获取计算机cpu,硬盘,内存相关的信息

    using System;using System.Management; namespace MmPS.Common.Helper{ /// <summary> /// 获取计算机相关的 ...

  8. 获取本地的jvm信息,进行图形化展示

    package test1; import java.lang.management.CompilationMXBean; import java.lang.management.GarbageCol ...

  9. .NET Core 获取操作系统各种信息

    .NET Core 获取操作系统各种信息 一.前言 .NET Core 内置了一些API供我们获取操作系统.运行时.框架等信息.这些API不是很常用,所有有些小伙伴可能还不知道,这里做一些可能用到的获 ...

随机推荐

  1. PHP之ThinkPHP框架(会话)

    网页会话即是实现页面跳转及数据传递,在web开发中,Cookie和Session的使用是极其重要的,GET和POST是最常使用的页面间数据传递的方法,相对于PHP脚本基础,在ThinkPHP中对网页会 ...

  2. 玩转Python图片处理 (OpenCV-Python )

    OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows.Android和Mac OS操作系统上.它轻量级而且高效——由一系列 C 函数和少量 C++ 类 ...

  3. 阿里启动新项目:Nacos,比 Eureka 更强!

    什么是 Nacos? Nacos 是阿里巴巴推出来的一个新开源项目,这是一个更易于构建云原生应用的动态服务发现.配置管理和服务管理平台. Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提 ...

  4. 安装MySQL时候最后一步报无法定位程序输入点fesetround于动态链接库MSVCR120.dll

    今天在装MySQL时到最后一步出现了一个问题[报无法定位程序输入点fesetround于动态链接库MSVCR120.dll]这是由什么原因引起的呢,其实是缺少一个vcredist_x64.exe插件 ...

  5. odoo开发笔记--from视图隐藏顶部&tree视图保留

    场景描述: 开发过程中,有时候我们需要去除odoo自带的一些样式, 比如,form视图,要集成自定义的界面时,就希望把顶部的服务动作 和 分页按钮 隐藏掉. 处理方式: 分两种情况: 1. 保留顶部区 ...

  6. CountDownLatch/CyclicBarrie用法记录

    在jdk1.5中,java提供了很多工具类帮助我们进行并发编程,其中就有CountDownLatch和CyclicBarrie 1.CountDownLatch的用法 CountDownLatch 位 ...

  7. java为什么用咖啡?

    2000年度的JavaOne国际会议大厅热闹非凡,一阵阵浓郁的咖啡味儿香气扑鼻.从世界各地汇集到旧金山参加会议的Java精英们兴奋异常,排着长队,等待得到一杯由Java语言控制的咖啡机煮制的免费咖啡. ...

  8. centos7非centos标准服务 /etc/init.d/service_name start || stop 启动异常

    公司自己写的java程序,在centos7系统执行/etc/init.d/service_name start||stop的时候报错: grafana二次开发的程序 [root@docp1 init. ...

  9. spring-boot(七) 随机端口

    学习文章:springboot小技巧 随机端口 为Spring Cloud的应用实用随机端口非常简单,主要有两种方法: 设置server.port=0,当应用启动的时候会自动的分配一个随机端口,但是该 ...

  10. 正确重写hashcode hashcode与equals方法 集合元素如何判断是否相等 集合如何查看是否包含某个元素

    首先记住两句话 相等的两个对象,即equals(Object)方法判断两个对象相等,那么他们必须要有相同的hashcode hashcode相同的两个对象,他们可能相同,也可能不相同 简单地说可以这么 ...