本文通过一个Demo,讲解如何通过C#获取操作系统相关的信息,如内存大小,cpu大小,机器名,环境变量等操作系统软件、硬件相关信息,仅供学习分享使用,如有不足之处,还请指正。
涉及知识点:
- Environment 提供有关当前环境和平台的信息以及操作它们的方法。
- ManagementClass 表示公共信息模型 (CIM) 管理类。管理类是一个 WMI 类,如 Win32_Logicaldisk 和 Win32_Process,前者表示磁盘驱动器,后者表示进程(如 Notepad.exe)。通过该类的成员,可以使用特定的 WMI 类路径访问 WMI 数据。
效果图
系统信息 :获取如系统目录,平台标识,登录用户名,盘符,所在的域 等信息
环境变量:即操作系统运行的参数,看看有没有眼前为之一亮的信息
特殊目录:桌面,我的文档,收藏夹,等目录,是不是很熟悉
操作系统:以下是获取cpu的信息,如型号,名称,个数,速度,厂商等信息【还可以获取其他如内存,硬盘等信息】
核心代码
代码如下:
1 namespace DemoEnvironment 2 { 3 public partial class MainFrom : Form 4 { 5 public MainFrom() 6 { 7 InitializeComponent(); 8 } 9 10 private void MainFrom_Load(object sender,EventArgs e) 11 12 string machineName = Environment.MachineName; 13 string osversionName = Getosversion(Environment.Osversion.Version); 14 string servicePack = Environment.Osversion.ServicePack; 15 osversionName = osversionName + " " + servicePack; 16 string userName = Environment.UserName; 17 string domainName = Environment.UserDomainName; 18 string tickCount = (Environment.TickCount / 1000).ToString() + "s"; 19 string systemPageSize = (Environment.SystemPageSize / 1024).ToString() + KB 20 string systemDir = Environment.SystemDirectory; 21 string stackTrace = Environment.StackTrace; 22 string processorCounter = Environment.ProcessorCount.ToString(); 23 string platform = Environment.Osversion.Platform.ToString(); 24 string newLine = Environment.NewLine; 25 bool is64Os = Environment.Is64BitOperatingSystem; 26 bool is64Process = Environment.Is64BitProcess; 27 28 string currDir = Environment.CurrentDirectory; 29 string cmdLine = Environment.CommandLine; 30 string[] drives = Environment.GetLogicalDrives(); 31 //long workingSet = (Environment.WorkingSet / 1024); 32 this.lblMachineName.Text = machineName; 33 this.lblOsversion.Text = osversionName; 34 this.lblUserName.Text = userName; 35 this.lblDomineName.Text = domainName; 36 this.lblStartTime.Text = tickCount; 37 this.lblPageSize.Text = systemPageSize; 38 this.lblSystemDir.Text = systemDir; 39 this.lblLogical.Text = string.Join(, 40 this.lblProcesserCounter.Text = processorCounter; 41 this.lblPlatform.Text = platform; 42 this.lblNewLine.Text = newLine.ToString(); 43 this.lblSystemType.Text = is64Os ? 64bit" : 32bit 44 this.lblProcesstype.Text = is64Process ? 45 this.lblCurDir.Text = currDir; 46 this.lblCmdLine.Text = cmdLine; 47 this.lblWorkSet.Text = GetPhisicalMemory().ToString()+MB 48 环境变量 49 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment 50 IDictionary dicMachine = Environment.GetEnvironmentvariables(EnvironmentvariableTarget.Machine); 51 this.rtbVaribles.AppendText(string.Format({0}: {1}",机器环境变量 52 foreach (string str in dicMachine.Keys) { 53 string val = dicMachine[str].ToString(); 54 {0}: {1}{2} 55 } 56 {0}{1}>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 57 环境变量存储在 Windows 操作系统注册表的 HKEY_CURRENT_USER\Environment 项中,或从其中检索。 58 IDictionary dicUser = Environment.GetEnvironmentvariables(EnvironmentvariableTarget.User); 59 用户环境变量 60 dicUser.Keys) 61 { 62 dicUser[str].ToString(); 63 64 65 66 IDictionary dicProcess = Environment.GetEnvironmentvariables(EnvironmentvariableTarget.Process); 67 进程环境变量 68 dicProcess.Keys) 69 70 dicProcess[str].ToString(); 71 72 73 特殊目录 74 string[] names = Enum.GetNames(typeof(Environment.SpecialFolder)); 75 string name names){ 76 77 Environment.SpecialFolder sf; 78 if (Enum.TryParse<Environment.SpecialFolder>(name,out sf)) 79 { 80 string folder = Environment.GetFolderPath(sf); 81 this.rtbFolders.AppendText( 82 } 83 84 获取其他硬件,软件信息 85 GetPhicnalInfo(); 86 87 88 string Getosversion(Version ver) { 89 string strClient = "" 90 if (ver.Major == 5 && ver.Minor == 1) 91 92 strClient = Win XP 93 94 else 6 && ver.Minor == 0 95 96 strClient = Win Vista 97 98 99 100 strClient = Win 7101 102 103 104 strClient = Win 2000105 106 else 107 108 strClient = 未知109 110 return strClient; 111 112 113 /// <summary> 114 /// 获取系统内存大小 115 </summary> 116 <returns>内存大小(单位M)</returns> 117 int GetPhisicalMemory() 118 119 ManagementObjectSearcher searcher = new ManagementObjectSearcher(); 用于查询一些如系统信息的管理对象 120 searcher.Query = new SelectQuery(Win32_PhysicalMemory "",1)">new string[] { Capacity" });设置查询条件 121 ManagementObjectCollection collection = searcher.Get(); 获取内存容量 122 ManagementObjectCollection.ManagementObjectEnumerator em = collection.GetEnumerator(); 123 124 long capacity = 125 while (em.MoveNext()) 126 127 ManagementBaSEObject baSEObj = em.Current; 128 if (baSEObj.Properties["].Value != null129 130 try 131 { 132 capacity += long.Parse(baSEObj.Properties[].Value.ToString()); 133 } 134 catch 135 136 return 137 138 139 140 return (int)(capacity / 1024 / 1024); 141 142 143 144 /// https://msdn.microsoft.com/en-us/library/aa394084(VS.85).aspx 145 146 <returns></returns> 147 GetPhicnalInfo() { 148 ManagementClass osClass = new ManagementClass(Win32_Processor");后面几种可以试一下,会有意外的收获Win32_PhysicalMemory/Win32_Keyboard/Win32_ComputerSystem/Win32_OperatingSystem 149 foreach (ManagementObject obj osClass.GetInstances()) 150 151 PropertyDataCollection pdc = obj.Properties; 152 foreach (PropertyData pd pdc) { 153 this.rtbOs.AppendText(\r\n)); 154 155 156 157 158 } 159 }
小例子,小知识 ,积跬步以至千里, 积小流以成江海。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。