using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
using System.Drawing;
namespace RSS_STAND_ALONE
{
public class SystemInfo
{
public virtual List<string> GetMonitorPnpDeviceId()
{
List<string> rt = new List<string>();
using (System.Management.ManagementClass mc = new System.Management.ManagementClass("Win32_DesktopMonitor"))
{
using (System.Management.ManagementObjectCollection moc = mc.GetInstances())
{
foreach (var o in moc)
{
var each = (System.Management.ManagementObject)o;
object obj = each.Properties["PNPDeviceID"].Value;
if (obj == null)
continue;
rt.Add(each.Properties["PNPDeviceID"].Value.ToString());
}
}
}
return rt;
}
public virtual byte[] GetMonitorEdid(string monitorPnpDevId)
{
return (byte[])Microsoft.Win32.Registry.GetValue(@"HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\" + monitorPnpDevId + @"\Device Parameters", "EDID", new byte[] { });
}
//获取显示器物理尺寸(cm)
public virtual SizeF GetMonitorPhysicalSize(string monitorPnpDevId)
{
byte[] edid = GetMonitorEdid(monitorPnpDevId);
if (edid.Length < 23)
return SizeF.Empty;
return new SizeF(edid[21], edid[22]);
}
//通过屏显示器理尺寸转换为显示器大小(inch)
public static float MonitorScaler(SizeF moniPhySize)
{
double mDSize = Math.Sqrt(Math.Pow(moniPhySize.Width, 2) + Math.Pow(moniPhySize.Height, 2)) / 2.54d;
return (float)Math.Round(mDSize, 1);
}
public static void Debug()
{
SystemInfo sysInfo = new SystemInfo();
string id = sysInfo.GetMonitorPnpDeviceId()[0];
SizeF size = sysInfo.GetMonitorPhysicalSize(id);
System.Windows.Forms. MessageBox.Show(SystemInfo.MonitorScaler(size).ToString() + @"寸");
}
}
}