/// <summary>
        /// Call this if you want to receive list of currently active monitors.
        /// What does "active" mean in our context? It means the monitors that are "enabled"
        /// in Desktop properties screen.
        /// </summary>
        /// <returns>list of active monitors</returns>
        public IEnumerable <IDisplay> GetActiveMonitors()
        {
            var displayDevices = GetDisplayDevices();

            // find out resolution parameters for each display device.
            foreach (var displayDevice in displayDevices.Where(
                         x => x.StateFlags.HasFlag(DisplayDeviceStateFlags.AttachedToDesktop)))
            {
                var mode = new DevMode {
                    size = (short)Marshal.SizeOf(typeof(DevMode))
                };

                // -1 means current RESOLUTION for specific display.
                // you can enumerate through 0..N to find supported resolutions.
                var success = XPWrapper.EnumDisplaySettings(displayDevice.DeviceName, -1, ref mode);
                if (!success)
                {
                    continue;
                }

                var origin      = mode.position;
                var resolution  = mode.resolution;
                var refreshRate = mode.displayFrequency;
                var rotation    = mode.displayOrientation;
                var isPrimary   = IsPrimaryDisplay(origin);

                if (isPrimary && !displayDevice.StateFlags.HasFlag(DisplayDeviceStateFlags.PrimaryDevice))
                {
                    throw new Exception("SEEMS LIKE MSDN DOCUMENT LIED, IF THIS ERROR EVER HAPPENS.");
                }

                yield return(new XPDisplay(new DisplaySettings(resolution, origin,
                                                               rotation.ToScreenRotation(), refreshRate, isPrimary, displayDevice.DeviceName)));
            }
        }
        public override IEnumerable <Display> GetActiveDisplays()
        {
            var displayDevices = GetDisplayDevices();

            // find out resolution parameters for each display device.
            foreach (var displayDevice in displayDevices.Where(
                         x => x.StateFlags.HasFlag(DisplayDeviceStateFlags.AttachedToDesktop)))
            {
                var mode = new DevMode {
                    size = (short)Marshal.SizeOf(typeof(DevMode))
                };

                // -1 means current RESOLUTION for specific display.
                // you can enumerate through 0..N to find supported resolutions.
                var success = XPWrapper.EnumDisplaySettings(displayDevice.DeviceName, -1, ref mode);
                if (!success)
                {
                    continue;
                }

                var origin      = mode.position;
                var resolution  = mode.resolution;
                var refreshRate = mode.displayFrequency;
                var rotation    = mode.displayOrientation;

                yield return(new Display
                {
                    Resolution = resolution,
                    Origin = origin,
                    Rotation = rotation.ToScreenRotation(),
                    RefreshRate = refreshRate,
                    Name = displayDevice.DeviceName
                });
            }
        }
        /// <summary>
        /// Gets all possible display devices.
        /// </summary>
        /// <returns></returns>
        private static IEnumerable <DisplayDevice> GetDisplayDevices()
        {
            var i     = 0;
            var valid = true;

            while (valid)
            {
                var displayDevice = new DisplayDevice {
                    cb = Marshal.SizeOf(typeof(DisplayDevice))
                };

                valid = XPWrapper.EnumDisplayDevices(null, i, ref displayDevice, 0);
                if (valid)
                {
                    yield return(displayDevice);
                }

                ++i;
            }
        }