本文通过一个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. dedecms中arclist标签做分页以及分页点击模块样式错乱问题

    in 使用织梦建站,通常会调用到一个文章列表,dedecms官网list标签没有提供typeid的属性,首页或多列表部分情况下使用分页并不方便,这就需要用arclist标签实现一个分页功能:以下还是展 ...

  2. django 模板层排序 class Meta 添加信息

    class weeks(models.Model): #星期信息 stu = models.ForeignKey(students,on_delete=models.CASCADE) weeklist ...

  3. 使用 Helm 包管理工具简化 Kubernetes 应用部署

    当在 Kubernetes 中已经部署很多应用时,后续需要对每个应用的 yaml 文件进行维护操作,这个过程会变的很繁琐,我们可以使用 Helm 来简化这些工作.Helm 是 Kubernetes 的 ...

  4. python等值和大小比较

    等值.大小比较 在python中,只要两个对象的类型相同,且它们是内置类型(字典除外),那么这两个对象就能进行比较.关键词:内置类型.同类型.所以,两个对象如果类型不同,就没法比较,比如数值类型的数值 ...

  5. 伪指令 ENTRY 与 END

    ENTRY ENTRY 是程序入口伪指令.在一个完整的汇编程序中至少有一个 ENTRY,编译程序在编译连接时依据程序入口进行连接.在只有一个入口时,编译程序会把这个入口的地址定义为系统复位后的程序起始 ...

  6. Python系列:三、流程控制循环语句--技术流ken

    Python条件语句 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 可以通过下图来简单了解条件语句的执行过程: Python程序语言指定任何非0和非 ...

  7. MySQL系列详解五: xtrabackup实现完全备份及增量备份详解-技术流ken

    xtrabackup简介 xtrabackup是一个用来对mysql做备份的工具,它可以对innodb引擎的数据库做热备.xtrabackup备份和还原速度快,备份操作不会中断正在执行的事务,备份完成 ...

  8. shell编程练习(一): 笔试1-10

    笔试练习(一): 1.求2个数之和 [root@VM_0_5_centos test]# vi 1.sh [root@VM_0_5_centos test]# cat 1.sh #! /bin/sh ...

  9. LeetCode Animation 题目图解汇总(持续更新中...)

    我会尽力将LeetCode上所有的题目都用动画的形式演示出来,期待与你见证这一天! GitHub Repo:LeetCode Animation Follow: MisterBooo · GitHub ...

  10. LeetCode-63. 不同路径 II

    最近英文版的访问特别慢,转战中文吧 和上一题一样,递归会超时 //63 不同路径2,递归解法 int uniquePaths2(vector<vector<int>>& ...