C# 獲取操作系統相關的信息

来源:http://www.cnblogs.com/hsiang/archive/2017/05/05/6814839.html
-Advertisement-
Play Games

C#獲取操作系統相關的信息,如記憶體大小,CPU大小,機器名,環境變數等操作系統軟體、硬體相關信息 ...


本文通過一個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(",", drives);
 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 ? "64bit" : "32bit";
 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}", "機器環境變數", newLine));
 52             foreach (string str in dicMachine.Keys) {
 53                 string val = dicMachine[str].ToString();
 54                 this.rtbVaribles.AppendText(string.Format("{0}: {1}{2}", str, val, newLine));
 55             }
 56             this.rtbVaribles.AppendText(string.Format("{0}{1}", ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", newLine));
 57             // 環境變數存儲在 Windows 操作系統註冊表的 HKEY_CURRENT_USER\Environment 項中,或從其中檢索。
 58             IDictionary dicUser = Environment.GetEnvironmentVariables(EnvironmentVariableTarget.User);
 59             this.rtbVaribles.AppendText(string.Format("{0}: {1}", "用戶環境變數", newLine));
 60             foreach (string str in dicUser.Keys)
 61             {
 62                 string val = dicUser[str].ToString();
 63                 this.rtbVaribles.AppendText(string.Format("{0}: {1}{2}", str, val, newLine));
 64             }
 65             this.rtbVaribles.AppendText(string.Format("{0}{1}", ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>", newLine));
 66             IDictionary dicProcess = Environment.GetEnvironmentVariables(EnvironmentVariableTarget.Process);
 67             this.rtbVaribles.AppendText(string.Format("{0}: {1}", "進程環境變數", newLine));
 68             foreach (string str in dicProcess.Keys)
 69             {
 70                 string val = dicProcess[str].ToString();
 71                 this.rtbVaribles.AppendText(string.Format("{0}: {1}{2}", str, val, newLine));
 72             }
 73             //特殊目錄 
 74             string[] names = Enum.GetNames(typeof(Environment.SpecialFolder));
 75             foreach (string name in 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(string.Format("{0}: {1}{2}", name, folder, newLine));
 82                 }
 83             }
 84             //獲取其他硬體,軟體信息
 85             GetPhicnalInfo();
 86         }
 87 
 88         private string GetOsVersion(Version ver) {
 89             string strClient = "";
 90             if (ver.Major == 5 && ver.Minor == 1)
 91             {
 92                 strClient = "Win XP";
 93             }
 94             else if (ver.Major == 6 && ver.Minor == 0)
 95             {
 96                 strClient = "Win Vista";
 97             }
 98             else if (ver.Major == 6 && ver.Minor == 1)
 99             {
100                 strClient = "Win 7";
101             }
102             else if (ver.Major == 5 && ver.Minor == 0)
103             {
104                 strClient = "Win 2000";
105             }
106             else
107             {
108                 strClient = "未知";
109             }
110             return strClient;
111         }
112 
113         /// <summary>
114         /// 獲取系統記憶體大小
115         /// </summary>
116         /// <returns>記憶體大小(單位M)</returns>
117         private int GetPhisicalMemory()
118         {
119             ManagementObjectSearcher searcher = new ManagementObjectSearcher();   //用於查詢一些如系統信息的管理對象 
120             searcher.Query = new SelectQuery("Win32_PhysicalMemory ", "", new string[] { "Capacity" });//設置查詢條件 
121             ManagementObjectCollection collection = searcher.Get();   //獲取記憶體容量 
122             ManagementObjectCollection.ManagementObjectEnumerator em = collection.GetEnumerator();
123 
124             long capacity = 0;
125             while (em.MoveNext())
126             {
127                 ManagementBaseObject baseObj = em.Current;
128                 if (baseObj.Properties["Capacity"].Value != null)
129                 {
130                     try
131                     {
132                         capacity += long.Parse(baseObj.Properties["Capacity"].Value.ToString());
133                     }
134                     catch
135                     {
136                         return 0;
137                     }
138                 }
139             }
140             return (int)(capacity / 1024 / 1024);
141         }
142 
143         /// <summary>
144         /// https://msdn.microsoft.com/en-us/library/aa394084(VS.85).aspx
145         /// </summary>
146         /// <returns></returns>
147         private int GetPhicnalInfo() {
148             ManagementClass osClass = new ManagementClass("Win32_Processor");//後面幾種可以試一下,會有意外的收穫//Win32_PhysicalMemory/Win32_Keyboard/Win32_ComputerSystem/Win32_OperatingSystem
149             foreach (ManagementObject obj in osClass.GetInstances())
150             {
151                 PropertyDataCollection pdc = obj.Properties;
152                 foreach (PropertyData pd in pdc) {
153                     this.rtbOs.AppendText(string.Format("{0}: {1}{2}", pd.Name, pd.Value, "\r\n")); 
154                 }
155             }
156             return 0;
157         }
158     }
159 }
View Code


工程下載 

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一,頁面上有一個checkbox和一個文本框。切換checkbox能對文本框輸入文本與否: <input type="checkbox" ng-model="ckSwitch" /> <input id="Text1" type="text" ng-disabled="!ckSwitch" ng-m ...
  • 大概所有做APP的公司都是不願意做自定義的,哪怕自己的功能再爛也願意慢慢修補不願意開源一部分。 卡牛… 51信用卡… 一次次的逾期 自己寫個信用卡管理工具,從郵件中提取賬單,還款後做個登記,到了還款日前檢查是否還完,沒還完就開始給自己發郵件騷擾吧,現在的手機郵箱都有郵件通知了,然後簡訊一條接一條,想... ...
  • webservice 可以用於分散式應用程式之間的交互,和不同程式之間的交互。 概念性的東西就不說太多,下麵開始創建一個簡單的webservice的例子。這裡我用的是Visual Studio 2015開發工具。 首先創建一個空的Web應用程式。 然後滑鼠右鍵點擊項目,選擇 添加>新建項。 選擇We ...
  • 在好多的.net的書籍中都看到過逆變和協變的概念,也在網上搜了一些關於這兩個概念的解釋,但是一直感覺似懂非懂的,直到最近在項目中實際遇到了一個問題,恰好用到了逆變,總算對逆變的理解又進了一步。 逆變只能用到泛型介面和委托中,以前一直不理解為什麼要用在泛型中,今天終於想明白了。在介紹逆變之前,先來說說 ...
  • 一直很羡慕和佩服園子中伍華聰的界面設計和佈局。好多年都沒有真正寫過C/S項目了,今天翻出來6年前剛開始學習WinForm的時候寫的一個簡單的HR管理系統,思緒一下子很複雜,記得是6年前的夏天,天氣很熱,租住的房子里沒有空調,身邊放個扇子,人家周末出去玩的時候,我還在拼命的敲著代碼,一心只想著好好提高 ...
  • 在使用Sqlhelper類時,出現cs0103錯誤 當前上下文中不存在名稱configurationmanager 解決方案,除了using引用using System.Configuration外,還需在解決方案資源管理器里的“引用”中添加“System.Configuration”。 ...
  • 這個訪問層的代碼實際上是園子里某個前輩的,本人只是覺得好使,記錄了下來。 本訪問層需要通過Nuget安裝EntityFramework Core,不過個人認為EF 6同樣可以使用。 搭配資料庫,最好是Sql Server(微軟支持,你懂的) 下麵貼代碼 先是IRepository.cs 然後是實現 ...
  • 雖然2月初就回來了,可 CoreCRM 一直到5月才開始恢復開發,期間是各種生活中的意外和不方便。 1. 為什麼要重構 首先是一件很值得高興的事情:CoreCRM 有了第一位 contributor! "Larry" 是我原來的一位實習生,現在在某公司做前端開發。因為 Larry 的加入,我就不再是 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...