C# 获取显示器物理尺寸
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() + @"寸");