private static IEnumerable <MonitorDeviceEdidInfoNative> EnumerateMonitorEdidDevicesImpl() { var info = new Collection <MonitorDeviceEdidInfoNative>(); var GUID_DEVCLASS_MONITOR = GuidDevClass.GUID_DEVCLASS_MONITOR; var canContinue = true; while (canContinue) { IntPtr devInfo = SetupApi.NativeMethods.SetupDiGetClassDevsEx( ref GUID_DEVCLASS_MONITOR, // class GUID null, // enumerator IntPtr.Zero, // HWND SetupApi.DiGetClassFlags.DIGCF_PRESENT, // Flags IntPtr.Zero, // device info, create a new one null, // machine name, local machine IntPtr.Zero); if (devInfo == IntPtr.Zero) { canContinue = false; } if (!canContinue) { break; } for (uint i = 0; Marshal.GetLastWin32Error() != Win32ErrorCode.ERROR_NO_MORE_ITEMS; i++) { SetupApi.SP_DEVINFO_DATA devInfoData = SetupApi.SP_DEVINFO_DATA.Empty; bool deviceInfoSuccess = SetupApi.NativeMethods.SetupDiEnumDeviceInfo(devInfo, i, ref devInfoData); if (!deviceInfoSuccess) { canContinue = false; } if (!canContinue) { continue; } MonitorDeviceEdidInfoNative candidate = GetMonitorDeviceEdidInfo(devInfo, devInfoData); var canAdd = candidate.IsValid && candidate != MonitorDeviceEdidInfoNative.NoValid; if (canAdd) { info.Add(candidate); } } } return(info); }
/// <summary> /// Initializes a new instance of the <see cref="MonitorDeviceInfo"/> structure. /// </summary> /// <param name="deviceInfo">Monitor information.</param> /// <param name="edidDeviceInfo">Screen information.</param> internal MonitorDeviceInfo(MonitorDeviceInfoNative deviceInfo, MonitorDeviceEdidInfoNative edidDeviceInfo) { _deviceInfo = deviceInfo; _edidDeviceInfo = edidDeviceInfo; }