Exemple #1
0
        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);
        }
Exemple #2
0
 /// <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;
 }