using ryCommon; using System; using System.Collections.Generic; using System.Linq; using System.Management; using System.Text; using System.Windows.Forms; namespace RyHardWare { /// /// /// public class HardWare { /// /// 获取WMI内容 /// /// /// public string GetWMI(string sql) { System.Management.ManagementObjectSearcher mos = new System.Management.ManagementObjectSearcher(sql); System.Management.ManagementObjectCollection.ManagementObjectEnumerator moe = mos.Get().GetEnumerator(); //注意 //Properties["Manufacturer"].Value 可能为Null,意味着没有厂商信息 var result = ""; while (moe.MoveNext()) { foreach (var item in moe.Current.Properties) { if (item.Value != null) { if (item.Value is string[]) { var list = (string[])item.Value; for (int i = 0; i < list.Length; i++) { result += "\r\n" + item.Name + "=>数组" + i + "=>" + list[i]; } } else { result += "\r\n" + item.Name + "=>" + item.Value.ToString(); } } } result += "\r\n"; } return result.Trim(); } /// /// 获取WMI内容 /// /// /// public string GetWMIByName(string name) { return GetWMI("select * from " + name); } /// /// 获取内存信息 /// /// public static string GetMemoryInfo() { var result = ""; System.Management.ManagementObjectSearcher mos = new System.Management.ManagementObjectSearcher("select * from Win32_PhysicalMemory"); System.Management.ManagementObjectCollection.ManagementObjectEnumerator moe = mos.Get().GetEnumerator(); long total_size = 0; var index = 0; Dictionary dict = new Dictionary(); while (moe.MoveNext()) { index++; var item = moe.Current.Properties; long Capacity = item["Capacity"].Value.ToInt64() / 1024 / 1024 / 1024; total_size += Capacity; var Manufacturer = ObjToStr(item["Manufacturer"].Value); var Speed = item["Speed"].Value.ToInt(); var ddr = ObjToStr(item["PartNumber"].Value); if (ddr.IndexOfEx("DDR3") >= 0) { ddr = "DDR3"; } else if (ddr.IndexOfEx("DDR4") >= 0) { ddr = "DDR4"; } else if (ddr.IndexOfEx("D4") >= 0) { ddr = "DDR4"; } else if (ddr.IndexOfEx("D3") >= 0) { ddr = "DDR3"; } else if (Speed == 266 || Speed == 333 || Speed == 400) { ddr = "DDR"; } else if (Speed == 533 || Speed == 667 || Speed == 800) { ddr = "DDR2"; } else if (Speed == 1066 || Speed == 1333 || Speed == 1600) { ddr = "DDR3"; } else if (Speed == 2400 || Speed == 2133 || Speed == 2666 || Speed == 3200) { ddr = "DDR4"; } else { ddr = "未知"; } if (Manufacturer == "Kingston") { Manufacturer = "金士顿"; } else if (Manufacturer == "A-DATA Technology") { Manufacturer = "威刚"; } else { Manufacturer = GetManufacturer(Manufacturer); } var memory = Capacity + "GB " + Manufacturer + " " + ddr + " " + Speed + "MHz"; if (dict.ContainsKey(memory)) { dict[memory]++; } else { dict[memory] = 1; } } foreach (var item in dict) { if (result.Length > 0) { result += "/"; } if (item.Value >= 2) { result += item.Key + "*" + item.Value; } else { result += item.Key; } } if (index >= 2) { result = total_size + "GB(" + result + ")"; } return result; } /// /// 获取显卡信息 /// /// public static string GetVideoInfo() { var result = ""; System.Management.ManagementObjectSearcher mos = new System.Management.ManagementObjectSearcher("select * from Win32_VideoController"); System.Management.ManagementObjectCollection.ManagementObjectEnumerator moe = mos.Get().GetEnumerator(); while (moe.MoveNext()) { var item = moe.Current.Properties; var Availability = ObjToStr(item["Availability"].Value); if (Availability != "3") { continue; } var Caption = ObjToStr(item["Caption"].Value); string RAM_Str; var RAM = ObjToStr(item["AdapterRAM"].Value).ToInt64()/1024/1024; if (RAM >= 1024) { RAM_Str = (RAM / 1024m).ToNString("0.00")+"GB"; } else { RAM_Str = RAM + "MB"; } if (result.Length > 0) { result += "/"; } result += Caption+ "("+ RAM_Str + ")"; } return result; } /// /// 获取显卡信息 /// /// public static string GetDiskInfo() { var list = GetDiskListInfo(); var result = ""; for (int i = 0; i < list.Count; i++) { if (result.Length > 0) { result += "/"; } result += list[i]; } return result; } /// /// 获取显卡信息 /// /// public static List GetDiskListInfo() { var result = new List(); System.Management.ManagementObjectSearcher mos = new System.Management.ManagementObjectSearcher("select * from Win32_DiskDrive"); System.Management.ManagementObjectCollection.ManagementObjectEnumerator moe = mos.Get().GetEnumerator(); while (moe.MoveNext()) { var item = moe.Current.Properties; var size_long = ObjToStr(item["Size"].Value).ToInt64(); var Size_1024 = size_long / 1024 / 1024 / 1024; var Size_1000 = size_long / 1000 / 1000 / 1000; string SizeStr; if(Size_1000>=1000) { SizeStr = (Size_1000 / 1000) + "TB"; } else { SizeStr = Size_1000 + "GB"; } if (Size_1024 >= 1024) { SizeStr += "[实际"+(Size_1024 / 1024d).ToNString("0.00") + "TB]"; } else { SizeStr += "[实际" + Size_1024 + "GB]"; } var Caption = ObjToStr(item["Caption"].Value); var MediaType = ObjToStr(item["MediaType"].Value); if (MediaType == "External hard disk media") { continue; } if (MediaType == "Removable Media") { continue; } if (Caption.StartsWith("TOSHIBA", StringComparison.OrdinalIgnoreCase)) { result.Add(SizeStr + " 东芝 " + Caption); } else if (Caption.StartsWith("ST", StringComparison.OrdinalIgnoreCase)) { result.Add(SizeStr + " 希捷 " + Caption); } else if (Caption.StartsWith("WD", StringComparison.OrdinalIgnoreCase)) { result.Add(SizeStr + " 西数 " + Caption); } else { var iPos = Caption.IndexOfEx(" "); if(iPos<=0) { result.Add(SizeStr + " " + Caption); } else { result.Add(SizeStr + " " + GetManufacturer(Caption.Substring(0,iPos))+" "+Caption.Substring(iPos+1)); } } } return result; } /// /// 获取硬盘信息 /// /// public static string GetDiskMultiInfo() { var list = GetDiskListInfo(); var result = ""; for (int i = 0; i < list.Count; i++) { if (result.Length > 0) { result += "\r\n"; } result += i == 0 ? "主硬盘:" : "硬盘" + (i + 1) + ":"; result += list[i]; } return result; } /// /// 获取主板信息 /// /// public static string GetBaseBoardInfo() { var result = ""; System.Management.ManagementObjectSearcher mos = new System.Management.ManagementObjectSearcher("select * from WIN32_BaseBoard"); System.Management.ManagementObjectCollection.ManagementObjectEnumerator moe = mos.Get().GetEnumerator(); while (moe.MoveNext()) { var item = moe.Current.Properties; var Manufacturer = ObjToStr(item["Manufacturer"].Value); var Product = ObjToStr(item["Product"].Value); if (result.Length > 0) { result += "/"; } result += "["+GetManufacturer(Manufacturer) + "]" + Product; } return result; } private static string GetManufacturer(string Manufacturer) { var ini_path = Application.StartupPath + "\\UserDb\\Manufacturer.ini"; if (System.IO.File.Exists(ini_path)) { ryCommon.Ini ini = new ryCommon.Ini(ini_path); return ini.ReadIni(Manufacturer, "name", Manufacturer); } else { switch(Manufacturer) { case "SOYO":return "梅捷"; case "BIOSTAR": case "BIOSTAR Group": return "映泰"; case "Gigabyte Technology Co., Ltd.": return "技嘉"; case "ASUSTeK COMPUTER INC.": return "华硕"; case "Micro-Star International Co., Ltd.": return "微星"; case "SUPoX COMPUTER CO.,LTD": return "磐正"; case "Samsung": return "三星"; case "ADATA": return "威刚"; case "SanDisk": return "闪迪"; case "Macmemory": return "王储"; case "KINGSTON": return "金士顿"; case "G Skill": return "芝奇"; case "GALAX": return "影驰"; case "Corsair": return "海盗船"; case "INTEL": return "英特尔"; } } return Manufacturer; } /// /// 获取处理器信息 /// /// public static string GetCPU() { ManagementObjectSearcher searcher = new ManagementObjectSearcher(); //用于查询一些如系统信息的管理对象 searcher.Query = new SelectQuery("Win32_Processor ", "", new string[] { "Name" });//设置查询条件 ManagementObjectCollection collection = searcher.Get(); //获取内存容量 ManagementObjectCollection.ManagementObjectEnumerator em = collection.GetEnumerator(); string name = ""; Dictionary dict = new Dictionary(); while (em.MoveNext()) { ManagementBaseObject baseObj = em.Current; if (baseObj.Properties["Name"].Value != null) { try { name = baseObj.Properties["Name"].Value.ToString(); if (dict.ContainsKey(name)) { dict[name]++; } else { dict[name] = 1; } } catch { return ""; } } } name = ""; foreach (var item in dict) { if (name.Length > 0) { name += "/"; } if (item.Value >= 2) { name += "("+item.Key + ")*" + item.Value; } else { name += item.Key; } } return name; } /// ///获取主要硬件信息 /// /// public static string GetMainHardware() { return GetMainHardware(false); } /// /// 获取主要硬件信息 /// /// 是否获取XML格式 /// public static string GetMainHardware(bool getbyXML) { if (getbyXML) { ryCommon.Storage mStor = new Storage(); addValue("主板", GetBaseBoardInfo()); addValue("处理器", GetCPU()); addValue("显卡", GetVideoInfo()); addValue("内存", GetMemoryInfo()); var list_disk = HardWare.GetDiskListInfo(); for (int i = 0; i < list_disk.Count; i++) { addValue((i == 0 ? "主硬盘 " : "硬盘"), list_disk[i]); } void addValue(string name, string value) { mStor.AddNode2("name", name); mStor.SetAttrValue("value", value); } return mStor.XMLText; } else { var content = "主板 " + HardWare.GetBaseBoardInfo(); content += "\r\n处理器 " + HardWare.GetCPU(); content += "\r\n显卡 " + HardWare.GetVideoInfo(); content += "\r\n内存 " + HardWare.GetMemoryInfo(); var list_disk = HardWare.GetDiskListInfo(); for (int i = 0; i < list_disk.Count; i++) { content += "\r\n" + (i == 0 ? "主硬盘 " : "硬盘" + " ") + list_disk[i]; } return content; } } private static string ObjToStr(object obj) { if (obj == null) { return ""; } return obj.ToString(); } } }