using Microsoft.Win32; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Management; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; namespace Container.Common { class DeviceInfo { /// /// 获取硬盘容量 /// 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; } } public class CommonUtlity { /// /// 将字节转换为GB /// /// 字节值 /// 除数,硬盘除以1000,内存除以1024 /// 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]; } } /// /// windows api 名称 /// public enum WindowsAPIType { /// /// 内存 /// Win32_PhysicalMemory, /// /// cpu /// Win32_Processor, /// /// 硬盘 /// win32_DiskDrive, /// /// 电脑型号 /// Win32_ComputerSystemProduct, /// /// 分辨率 /// Win32_DesktopMonitor, /// /// 显卡 /// Win32_VideoController, /// /// 操作系统 /// Win32_OperatingSystem } public enum WindowsAPIKeys { /// /// 名称 /// Name, /// /// 显卡芯片 /// VideoProcessor, /// /// 显存大小 /// AdapterRAM, /// /// 分辨率宽 /// ScreenWidth, /// /// 分辨率高 /// ScreenHeight, /// /// 电脑型号 /// Version, /// /// 硬盘容量 /// Size, /// /// 内存容量 /// Capacity, /// /// cpu核心数 /// NumberOfCores } /// /// 电脑信息类 单例 /// 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; //} /// /// 查找cpu的名称,主频, 核心数 /// /// public Tuple GetCPU() { Tuple 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(parts[0].Split('-')[0] + "处理器", parts[1]); break; } } catch { } return result; } /// /// 获取cpu核心数 /// /// 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; } /// /// 获取系统内存大小 /// /// 内存大小(单位M) 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); } /// /// 获取硬盘容量 /// 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; } /// /// 电脑型号 /// 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; } /// /// 获取分辨率 /// 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; } /// /// 显卡 芯片,显存大小 /// public Tuple GetVideoController() { Tuple result = null; try { ManagementClass hardDisk = new ManagementClass(WindowsAPIType.Win32_VideoController.ToString()); ManagementObjectCollection hardDiskC = hardDisk.GetInstances(); foreach (ManagementObject m in hardDiskC) { result = new Tuple(m[WindowsAPIKeys.VideoProcessor.ToString()].ToString() .Replace("Family", ""), CommonUtlity.ToGB(Convert.ToInt64(m[WindowsAPIKeys.AdapterRAM.ToString()].ToString()), 1024.0)); break; } } catch { } return result; } /// /// 操作系统版本 /// 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; } [DllImport("Kernel32.dll")] public static extern void GlobalMemoryStatus(ref MEMORY_INFO meminfo); [StructLayout(LayoutKind.Sequential)] public struct MEMORY_INFO { public uint dwLength; public uint dwMemoryLoad; public uint dwTotalPhys; public uint dwAvailPhys; public uint dwTotalPageFile; public uint dwAvailPageFile; public uint dwTotalVirtual; public uint dwAvailVirtual; } MEMORY_INFO MemInfo = new MEMORY_INFO(); /// /// 获取当前CPU温度、内存使用率 /// public string GetNow_WindowsState() { string str = ""; Double CPUtprt = 0; ManagementObjectSearcher mos = new ManagementObjectSearcher(@"root\WMI", @"Select * From MSAcpi_ThermalZoneTemperature"); foreach (ManagementObject mo in mos.Get()) { CPUtprt = Convert.ToDouble(Convert.ToDouble(mo.GetPropertyValue("CurrentTemperature").ToString()) - 2732) / 10; } str = "CPU温度:" + CPUtprt.ToString() + "℃ 内存使用率:" + MemInfo.dwMemoryLoad.ToString() + "%"; return str; } /// /// 获取当前Windows版本、序列号 /// public string WindowsInfo() { RegistryKey rk; rk = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows NT\\CurrentVersion"); string s = ""; if (rk.GetValue("ProductName") != null) { s = "当前操作系统版本:" + rk.GetValue("ProductName").ToString(); } else return ""; if (rk.GetValue("CSDVersion") != null) { s = s + "\r\n" + rk.GetValue("CSDVersion").ToString(); } if (rk.GetValue("ProductId") != null) { s = s + "\r\n当前操作系统安装序列号:\r\n" + rk.GetValue("ProductId").ToString(); } if (rk.GetValue("CurrentBuildNumber") != null) { s = s + "\r\n当前系统版本号:" + rk.GetValue("CurrentBuildNumber").ToString(); } rk.Close(); return s; } /// /// 获取操作系统位数(x32/64) /// /// int public static int GetOSBit() { try { string addressWidth = String.Empty; ConnectionOptions mConnOption = new ConnectionOptions(); ManagementScope mMs = new ManagementScope(@"\\localhost", mConnOption); ObjectQuery mQuery = new ObjectQuery("select AddressWidth from Win32_Processor"); ManagementObjectSearcher mSearcher = new ManagementObjectSearcher(mMs, mQuery); ManagementObjectCollection mObjectCollection = mSearcher.Get(); foreach (ManagementObject mObject in mObjectCollection) { addressWidth = mObject["AddressWidth"].ToString(); } return Int32.Parse(addressWidth); } catch (Exception ex) { Console.WriteLine(ex.ToString()); return 32; } } string GetWindowsLanguage() { string lg = ""; int lcid = System.Globalization.CultureInfo.CurrentCulture.LCID; string LanguageName = System.Globalization.CultureInfo.CurrentCulture.NativeName; string LangName = System.Globalization.RegionInfo.CurrentRegion.NativeName; System.Console.WriteLine("Lcid:" + lcid.ToString()); lg = "Lcid:" + lcid.ToString(); System.Console.WriteLine("区域语言:" + LanguageName); lg += "区域语言:" + LanguageName; System.Console.WriteLine("区域语言2:" + LangName); lg += "区域语言2:" + LangName; return lg; //try //{ // Process MyProcess = new Process(); // //设定程序名 // MyProcess.StartInfo.FileName = "cmd.exe"; // //关闭Shell的使用 // MyProcess.StartInfo.UseShellExecute = false; // //重定向标准输入 // MyProcess.StartInfo.RedirectStandardInput = true; // //重定向标准输出 // MyProcess.StartInfo.RedirectStandardOutput = true; // //重定向错误输出 // MyProcess.StartInfo.RedirectStandardError = true; // //设置不显示窗口 // MyProcess.StartInfo.CreateNoWindow = true; // MyProcess.StartInfo.Arguments = "/c C:\\Windows\\System32\\cmd.exe"; // string cmdtext = string.Empty; // cmdtext = "slmgr.vbs /xpr" ; //关机 // Console.WriteLine(cmdtext); // //执行VER命令 // MyProcess.Start(); // MyProcess.StandardInput.WriteLine(cmdtext); // //MessageBox.Show(MyProcess.StandardOutput.ReadToEnd()); // //MessageBox.Show(MyProcess.StandardError.ReadToEnd()); // string output = ""; // char[] outl = new char[2048]; // string error = ""; // using (System.IO.StreamReader myOutput = MyProcess.StandardOutput) // { // myOutput.Read(outl, 0, 2048); // output = new string(outl); // log.WriteLogFile(output, "cmdexelog"); // } // using (System.IO.StreamReader myError = MyProcess.StandardError) // { // myError.Read(outl, 0, 1024); // error = new string(outl); // log.WriteLogFile(error, "cmdexelog"); // } // } // } //} //catch (Exception ex) //{ // log.WriteLogFile(ex.ToString()); //} } } }