public Monitor(Win32.DISPLAY_DEVICE device, Win32.DEVMODE currentDisplaySettings, List<Win32.DEVMODE> availableDisplaySettings)
 {
     Device = device;
     AvailableDisplaySettings = availableDisplaySettings;
     CurrentDisplaySettings = currentDisplaySettings;
     IsPrimary = CurrentDisplaySettings.dmPositionX == 0 && CurrentDisplaySettings.dmPositionY == 0;
 }
        private static List <Win32.DISPLAY_DEVICE> EnumerateDesktopDisplayDevices()
        {
            var displayDevices = new List <Win32.DISPLAY_DEVICE>();

            /* Keep looping through device indicies with i until we are done
             */
            for (uint i = 0; ; i++)
            {
                Win32.DISPLAY_DEVICE displayDevice = new Win32.DISPLAY_DEVICE();
                const uint           displayFlags  = Win32.EDD_GET_DEVICE_INTERFACE_NAME;
                displayDevice.cb = Marshal.SizeOf(displayDevice);

                bool deviceAvailable = Win32.EnumDisplayDevices(null, i, ref displayDevice, displayFlags);

                /* If EnumDisplayDevices returns 'false' for a given device number, i, then
                 * there are no more devices.
                 */
                if (!deviceAvailable)
                {
                    break;
                }

                /* Only retrieve monitors that are actually attached to the desktop
                 */
                if ((displayDevice.StateFlags & Win32.DISPLAY_DEVICE_ATTACHED_TO_DESKTOP) ==
                    Win32.DISPLAY_DEVICE_ATTACHED_TO_DESKTOP)
                {
                    displayDevices.Add(displayDevice);
                }
            }

            return(displayDevices);
        }
 public Monitor(Win32.DISPLAY_DEVICE device, Win32.DEVMODE currentDisplaySettings, List <Win32.DEVMODE> availableDisplaySettings)
 {
     Device = device;
     AvailableDisplaySettings = availableDisplaySettings;
     CurrentDisplaySettings   = currentDisplaySettings;
     IsPrimary = CurrentDisplaySettings.dmPositionX == 0 && CurrentDisplaySettings.dmPositionY == 0;
 }
Exemple #4
0
        private void DisplayDebugInfo()
        {
            StringBuilder debug = new StringBuilder();

            foreach (Display.Monitor monitor in _Monitors)
            {
                Win32.DISPLAY_DEVICE device = monitor.Device;

                debug.AppendFormat("DeviceName:   {0}{1}", device.DeviceName, Environment.NewLine);
                debug.AppendFormat("DeviceString: {0}{1}", device.DeviceString, Environment.NewLine);
                debug.AppendFormat("DeviceString: {0}{1}", device.StateFlags, Environment.NewLine);
                debug.AppendFormat("DeviceID:     {0}{1}", device.DeviceID, Environment.NewLine);
                debug.AppendFormat("DeviceKey:    {0}{1}", device.DeviceKey, Environment.NewLine);

                Win32.DEVMODE currMode = monitor.CurrentDisplaySettings;
                debug.AppendFormat("Resolution:   {0}x{1}x{2}{3}", currMode.dmPelsWidth, currMode.dmPelsHeight,
                                   currMode.dmBitsPerPel, Environment.NewLine);
                debug.AppendFormat("Refresh Rate: {0}hz{1}", currMode.dmDisplayFrequency, Environment.NewLine);
                debug.AppendFormat("Position:{0}", Environment.NewLine);
                debug.AppendFormat("  X: {0}{1}", currMode.dmPositionX, Environment.NewLine);
                debug.AppendFormat("  Y: {0}{1}", currMode.dmPositionY, Environment.NewLine);

                debug.AppendFormat("Available Modes: {0}", Environment.NewLine);

                foreach (Win32.DEVMODE mode in monitor.AvailableDisplaySettings)
                {
                    Win32.DEVMODE curr     = monitor.CurrentDisplaySettings;
                    bool          selected = false;

                    if (mode.dmPelsWidth == curr.dmPelsWidth &&
                        mode.dmPelsHeight == curr.dmPelsHeight &&
                        mode.dmPelsWidth == curr.dmPelsWidth &&
                        mode.dmBitsPerPel == curr.dmBitsPerPel &&
                        mode.dmDisplayFrequency == curr.dmDisplayFrequency)
                    {
                        selected = true;
                    }

                    debug.AppendFormat("    {0}x{1}x{2} {3}hz {4}:{5} {6}{7}", mode.dmPelsWidth,
                                       mode.dmPelsHeight, mode.dmBitsPerPel, mode.dmDisplayFrequency, mode.dmPositionX,
                                       mode.dmPositionY, selected ? "<--" : "", Environment.NewLine);
                }

                debug.Append(Environment.NewLine);
            }
            DebugText.Text = debug.ToString();
        }
        private static List<Win32.DISPLAY_DEVICE> EnumerateDesktopDisplayDevices()
        {
            var displayDevices = new List<Win32.DISPLAY_DEVICE>();

            /* Keep looping through device indicies with i until we are done
             */
            for (uint i = 0; ; i++)
            {
                Win32.DISPLAY_DEVICE displayDevice = new Win32.DISPLAY_DEVICE();
                const uint displayFlags = Win32.EDD_GET_DEVICE_INTERFACE_NAME;
                displayDevice.cb = Marshal.SizeOf(displayDevice);

                bool deviceAvailable = Win32.EnumDisplayDevices(null, i, ref displayDevice, displayFlags);

                /* If EnumDisplayDevices returns 'false' for a given device number, i, then
                 * there are no more devices.
                 */
                if (!deviceAvailable) break;

                /* Only retrieve monitors that are actually attached to the desktop
                 */
                if ((displayDevice.StateFlags & Win32.DISPLAY_DEVICE_ATTACHED_TO_DESKTOP) ==
                    Win32.DISPLAY_DEVICE_ATTACHED_TO_DESKTOP)
                {
                    displayDevices.Add(displayDevice);
                }
            }

            return displayDevices;
        }