RaUI/Source/MyDb/HardWare/HardWare.cs
zilinsoft 3262955f2f ### 2023-11-07更新
------
#### RaUIV4    V4.0.2311.0701
- *.[全新]整合了MyDb、ryControls、MyDb_MySQL等dll文件到RaUI一个项目。
- *.[新增]新增ApkOp类,可以轻松获取APK信息。
- *.[新增]新增JsonExt扩展类,让Json操作更简单。
- *.[新增]新增WebP类,可以支持webp格式的图片。
- *.[改进]ryQuickSQL中的AddField方法改为自动替换已存在的同名值。
- *.[修复]ryQuickSQL中的AddFieldCalc方法无法正常计算的BUG。
2023-11-07 16:37:53 +08:00

395 lines
15 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using ryCommon;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Management;
using System.Text;
using System.Windows.Forms;
namespace RyHardWare
{
/// <summary>
///
/// </summary>
public class HardWare
{
/// <summary>
/// 获取WMI内容
/// </summary>
/// <param name="sql"></param>
/// <returns></returns>
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();
}
/// <summary>
/// 获取WMI内容
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public string GetWMIByName(string name)
{
return GetWMI("select * from " + name);
}
/// <summary>
/// 获取内存信息
/// </summary>
/// <returns></returns>
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<string, int> dict = new Dictionary<string, int>();
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;
}
/// <summary>
/// 获取显卡信息
/// </summary>
/// <returns></returns>
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;
}
/// <summary>
/// 获取显卡信息
/// </summary>
/// <returns></returns>
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;
}
/// <summary>
/// 获取显卡信息
/// </summary>
/// <returns></returns>
public static List<string> GetDiskListInfo()
{
var result = new List<string>();
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;
}
/// <summary>
/// 获取硬盘信息
/// </summary>
/// <returns></returns>
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;
}
/// <summary>
/// 获取主板信息
/// </summary>
/// <returns></returns>
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;
}
/// <summary>
/// 获取处理器信息
/// </summary>
/// <returns></returns>
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<string, int> dict = new Dictionary<string, int>();
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;
}
/// <summary>
///获取主要硬件信息
/// </summary>
/// <returns></returns>
public static string GetMainHardware()
{
return GetMainHardware(false);
}
/// <summary>
/// 获取主要硬件信息
/// </summary>
/// <param name="getbyXML">是否获取XML格式</param>
/// <returns></returns>
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();
}
}
}