public virtual List<string> GetMonitorPnpDeviceId() {
List<string> rt = new List<string>();
using (ManagementClass mc = new ManagementClass("Win32_DesktopMonitor")) {
using (ManagementObjectCollection moc = mc.GetInstances()) {
foreach (var o in moc) {
var each = (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[])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);
}
调用方法:
SystemInfo sysInfo = new SystemInfo(); string id = sysInfo.GetMonitorPnpDeviceId()[0]; SizeF size = sysInfo.GetMonitorPhysicalSize(id); MessageBox.Show(SystemInfo.MonitorScaler(size).ToString() + @"寸");