有時須要獲取電腦的相關信息。這時能夠經過調用windows api的方式,進行獲取。shell
能夠經過在powershell中 經過下面的命令進行查詢,而後能夠經過c#調用獲取須要的信息。c#
gwmi + windows api windows
如圖所示api
對應的c#代碼爲ide
/// <summary> /// 獲取硬盤容量 /// </summary> public string GetDiskSize() { string result = string.Empty; StringBuilder sb = new StringBuilder(); try { string hdId = string.Empty; ManagementClass hardDisk = new ManagementClass(WindowsAPIType.win32_DiskDrive.ToString()); ManagementObjectCollection hardDiskC = hardDisk.GetInstances(); foreach (ManagementObject m in hardDiskC) { long capacity = Convert.ToInt64(m[WindowsAPIKeys.Size.ToString()].ToString()); sb.Append(CommonUtlity.ToGB(capacity, 1000.0) + "+"); } result = sb.ToString().TrimEnd('+'); } catch { } return result; }
API和Keys枚舉ui
/// <summary> /// windows api 名稱 /// </summary> public enum WindowsAPIType { /// <summary> /// 內存 /// </summary> Win32_PhysicalMemory, /// <summary> /// cpu /// </summary> Win32_Processor, /// <summary> /// 硬盤 /// </summary> win32_DiskDrive, /// <summary> /// 電腦型號 /// </summary> Win32_ComputerSystemProduct, /// <summary> /// 分辨率 /// </summary> Win32_DesktopMonitor, /// <summary> /// 顯卡 /// </summary> Win32_VideoController, /// <summary> /// 操做系統 /// </summary> Win32_OperatingSystem }
public enum WindowsAPIKeys { /// <summary> /// 名稱 /// </summary> Name, /// <summary> /// 顯卡芯片 /// </summary> VideoProcessor, /// <summary> /// 顯存大小 /// </summary> AdapterRAM, /// <summary> /// 分辨率寬 /// </summary> ScreenWidth, /// <summary> /// 分辨率高 /// </summary> ScreenHeight, /// <summary> /// 電腦型號 /// </summary> Version, /// <summary> /// 硬盤容量 /// </summary> Size, /// <summary> /// 內存容量 /// </summary> Capacity, /// <summary> /// cpu核心數 /// </summary> NumberOfCores }
Computer類spa
/// <summary> /// 電腦信息類 單例 /// </summary> public class Computer { private static Computer _instance; private static readonly object _lock = new object(); private Computer() { } public static Computer CreateComputer() { if (_instance == null) { lock (_lock) { if (_instance == null) { _instance = new Computer(); } } } return _instance; } /// <summary> /// 查找cpu的名稱,主頻, 核心數 /// </summary> /// <returns></returns> public Tuple<string, string> GetCPU() { Tuple<string, string> result = null; try { string str = string.Empty; ManagementClass mcCPU = new ManagementClass(WindowsAPIType.Win32_Processor.ToString()); ManagementObjectCollection mocCPU = mcCPU.GetInstances(); foreach (ManagementObject m in mocCPU) { string name = m[WindowsAPIKeys.Name.ToString()].ToString(); string[] parts = name.Split('@'); result = new Tuple<string, string>(parts[0].Split('-')[0] + "處理器", parts[1]); break; } } catch { } return result; } /// <summary> /// 獲取cpu核心數 /// </summary> /// <returns></returns> public string GetCPU_Count() { string str = "查詢失敗"; try { int coreCount = 0; foreach (var item in new System.Management.ManagementObjectSearcher("Select * from " +
WindowsAPIType.Win32_Processor.ToString()).Get()) { coreCount += int.Parse(item[WindowsAPIKeys.NumberOfCores.ToString()].ToString()); } if (coreCount == 2) { return "雙核"; } str = coreCount.ToString() + "核"; } catch { } return str; } /// <summary> /// 獲取系統內存大小 /// </summary> /// <returns>內存大小(單位M)</returns> public string GetPhisicalMemory() { ManagementObjectSearcher searcher = new ManagementObjectSearcher(); //用於查詢一些如系統信息的管理對象 searcher.Query = new SelectQuery(WindowsAPIType.Win32_PhysicalMemory.ToString(), "",
new string[] { WindowsAPIKeys.Capacity.ToString() });//設置查詢條件 ManagementObjectCollection collection = searcher.Get(); //獲取內存容量 ManagementObjectCollection.ManagementObjectEnumerator em = collection.GetEnumerator(); long capacity = 0; while (em.MoveNext()) { ManagementBaseObject baseObj = em.Current; if (baseObj.Properties[WindowsAPIKeys.Capacity.ToString()].Value != null) { try { capacity += long.Parse(baseObj.Properties[WindowsAPIKeys.Capacity.ToString()].Value.ToString()); } catch { return "查詢失敗"; } } } return CommonUtlity.ToGB((double)capacity, 1024.0); } /// <summary> /// 獲取硬盤容量 /// </summary> public string GetDiskSize() { string result = string.Empty; StringBuilder sb = new StringBuilder(); try { string hdId = string.Empty; ManagementClass hardDisk = new ManagementClass(WindowsAPIType.win32_DiskDrive.ToString()); ManagementObjectCollection hardDiskC = hardDisk.GetInstances(); foreach (ManagementObject m in hardDiskC) { long capacity = Convert.ToInt64(m[WindowsAPIKeys.Size.ToString()].ToString()); sb.Append(CommonUtlity.ToGB(capacity, 1000.0) + "+"); } result = sb.ToString().TrimEnd('+'); } catch { } return result; } /// <summary> /// 電腦型號 /// </summary> public string GetVersion() { string str = "查詢失敗"; try { string hdId = string.Empty; ManagementClass hardDisk = new ManagementClass(WindowsAPIType.Win32_ComputerSystemProduct.ToString()); ManagementObjectCollection hardDiskC = hardDisk.GetInstances(); foreach (ManagementObject m in hardDiskC) { str = m[WindowsAPIKeys.Version.ToString()].ToString(); break; } } catch { } return str; } /// <summary> /// 獲取分辨率 /// </summary> public string GetFenbianlv() { string result = "1920*1080"; try { string hdId = string.Empty; ManagementClass hardDisk = new ManagementClass(WindowsAPIType.Win32_DesktopMonitor.ToString()); ManagementObjectCollection hardDiskC = hardDisk.GetInstances(); foreach (ManagementObject m in hardDiskC) { result = m[WindowsAPIKeys.ScreenWidth.ToString()].ToString() + "*" +
m[WindowsAPIKeys.ScreenHeight.ToString()].ToString(); break; } } catch { } return result; } /// <summary> /// 顯卡 芯片,顯存大小 /// </summary> public Tuple<string, string> GetVideoController() { Tuple<string, string> result = null; try { ManagementClass hardDisk = new ManagementClass(WindowsAPIType.Win32_VideoController.ToString()); ManagementObjectCollection hardDiskC = hardDisk.GetInstances(); foreach (ManagementObject m in hardDiskC) { result = new Tuple<string, string>(m[WindowsAPIKeys.VideoProcessor.ToString()].ToString()
.Replace("Family", ""), CommonUtlity.ToGB(Convert.ToInt64(m[WindowsAPIKeys.AdapterRAM.ToString()].ToString()), 1024.0)); break; } } catch { } return result; } /// <summary> /// 操做系統版本 /// </summary> public string GetOS_Version() { string str = "Windows 10"; try { string hdId = string.Empty; ManagementClass hardDisk = new ManagementClass(WindowsAPIType.Win32_OperatingSystem.ToString()); ManagementObjectCollection hardDiskC = hardDisk.GetInstances(); foreach (ManagementObject m in hardDiskC) { str = m[WindowsAPIKeys.Name.ToString()].ToString().Split('|')[0].Replace("Microsoft", ""); break; } } catch { } return str; } }
這裏只是枚舉了部分api,有興趣的能夠查看其它的windows api 並經過power shell查看,而後轉化爲c# 代碼便可。操作系統
這裏須要注意,硬盤容量在轉化的時候須要除以1000,而不是1024.但內存是須要除以1024的,這點須要注意。code
轉化方法:對象
/// <summary> /// 將字節轉換爲GB /// </summary> /// <param name="size">字節值</param> /// <param name="mod">除數,硬盤除以1000,內存除以1024</param> /// <returns></returns> public static string ToGB(double size, double mod) { String[] units = new String[] { "B", "KB", "MB", "GB", "TB", "PB" }; int i = 0; while (size >= mod) { size /= mod; i++; } return Math.Round(size) + units[i]; }