public void AttachToDesktop(string deviceName, bool primary, Rect area, int orientation, bool apply = true)
        {
            var devmode = new NativeMethods.DEVMODE(true)
            {
                DeviceName = deviceName,
                Position   = new NativeMethods.POINTL {
                    x = (int)area.X, y = (int)area.Y
                },
                PelsWidth          = (int)area.Width,
                PelsHeight         = (int)area.Height,
                DisplayOrientation = orientation,
                BitsPerPel         = 32,
                Fields             = NativeMethods.DM.Position | NativeMethods.DM.PelsHeight | NativeMethods.DM.PelsWidth | NativeMethods.DM.DisplayOrientation | NativeMethods.DM.BitsPerPixel
            };

            var flag =
                NativeMethods.ChangeDisplaySettingsFlags.CDS_UPDATEREGISTRY |
                NativeMethods.ChangeDisplaySettingsFlags.CDS_NORESET;

            if (primary)
            {
                flag |= NativeMethods.ChangeDisplaySettingsFlags.CDS_SET_PRIMARY;
            }


            var ch = NativeMethods.ChangeDisplaySettingsEx(deviceName, ref devmode, IntPtr.Zero, flag, IntPtr.Zero);

            if (ch == NativeMethods.DISP_CHANGE.Successful && apply)
            {
                ApplyDesktop();
            }
        }
示例#2
0
 public DisplayMode(NativeMethods.DEVMODE devmode)
 {
     DisplayOrientation = ((devmode.Fields & NativeMethods.DM.DisplayOrientation) != 0)?devmode.DisplayOrientation:0;
     Position           = ((devmode.Fields & NativeMethods.DM.Position) != 0)?new Point(devmode.Position.x, devmode.Position.y):new Point(0, 0);
     BitsPerPixel       = ((devmode.Fields & NativeMethods.DM.BitsPerPixel) != 0)?devmode.BitsPerPel:0;
     Pels               = ((devmode.Fields & (NativeMethods.DM.PelsWidth | NativeMethods.DM.PelsHeight)) != 0)? new Size(devmode.PelsWidth, devmode.PelsHeight):new Size(1, 1);
     DisplayFlags       = ((devmode.Fields & NativeMethods.DM.DisplayFlags) != 0)? devmode.DisplayFlags:0;
     DisplayFrequency   = ((devmode.Fields & NativeMethods.DM.DisplayFrequency) != 0)? devmode.DisplayFrequency:0;
     DisplayFixedOutput = ((devmode.Fields & NativeMethods.DM.DisplayFixedOutput) != 0)? devmode.DisplayFixedOutput:0;
 }
示例#3
0
        public void UpdateDevMode()
        {
            NativeMethods.DEVMODE devmode = new NativeMethods.DEVMODE(true);

            int i = 0;

            while (NativeMethods.EnumDisplaySettingsEx(DeviceName, i, ref devmode, 0))
            {
                DisplayModes.Add(new DisplayMode(devmode));
                i++;
            }
        }
示例#4
0
 public static void GetCurrentSettings()
 {
     NativeMethods.DEVMODE mode = new NativeMethods.DEVMODE();
     mode.dmSize = (ushort)Marshal.SizeOf(mode);
     if (NativeMethods.EnumDisplaySettings(null, NativeMethods.ENUM_CURRENT_SETTINGS, ref mode))
     {
         Console.WriteLine("Current Display Mode: {0}x{1}, {2} bit, {3} degrees, {4} Hz",
                           mode.dmPelsWidth, mode.dmPelsHeight,
                           mode.dmBitsPerPel,
                           mode.dmDisplayOrientation * 90,
                           mode.dmDisplayFrequency);
     }
 }
 public static void GetCurrentSettings()
 {
     NativeMethods.DEVMODE mode = new NativeMethods.DEVMODE();
     mode.dmSize = (ushort)Marshal.SizeOf(mode);
     if(NativeMethods.EnumDisplaySettings(null, NativeMethods.ENUM_CURRENT_SETTINGS, ref mode))
     {
         Console.WriteLine("Current Display Mode: {0}x{1}, {2} bit, {3} degrees, {4} Hz",
             mode.dmPelsWidth, mode.dmPelsHeight,
             mode.dmBitsPerPel,
             mode.dmDisplayOrientation * 90,
             mode.dmDisplayFrequency);
     }
 }
        private void RotateScreen()
        {
            // initialize the DEVMODE structure
            NativeMethods.DEVMODE dm = new NativeMethods.DEVMODE();
            dm.dmDeviceName = new string(new char[32]);
            dm.dmFormName   = new string(new char[32]);
            dm.dmSize       = (short)Marshal.SizeOf(dm);

            if (0 != NativeMethods.EnumDisplaySettings(null, NativeMethods.ENUM_CURRENT_SETTINGS, ref dm))
            {
                // swap width and height
                int temp = dm.dmPelsHeight;
                dm.dmPelsHeight = dm.dmPelsWidth;
                dm.dmPelsWidth  = temp;

                // determine new orientation
                switch (dm.dmDisplayOrientation)
                {
                case NativeMethods.DMDO_DEFAULT:
                    dm.dmDisplayOrientation = NativeMethods.DMDO_270;
                    break;

                case NativeMethods.DMDO_270:
                    dm.dmDisplayOrientation = NativeMethods.DMDO_180;
                    break;

                case NativeMethods.DMDO_180:
                    dm.dmDisplayOrientation = NativeMethods.DMDO_90;
                    break;

                case NativeMethods.DMDO_90:
                    dm.dmDisplayOrientation = NativeMethods.DMDO_DEFAULT;
                    break;

                default:
                    // unknown orientation value
                    // add exception handling here
                    break;
                }

                int iRet = NativeMethods.ChangeDisplaySettings(ref dm, 0);
                if ((NativeMethods.DISP_CHANGE)iRet != NativeMethods.DISP_CHANGE.Successful)
                {
                    // add exception handling here
                }
            }
        }
        public void DetachFromDesktop(string deviceName, bool apply = true)
        {
            NativeMethods.DEVMODE devmode = new NativeMethods.DEVMODE();
            devmode.Size = (short)Marshal.SizeOf(devmode);

            devmode.DeviceName = deviceName;
            devmode.PelsHeight = 0;
            devmode.PelsWidth  = 0;
            devmode.Fields     = NativeMethods.DM.PelsWidth | NativeMethods.DM.PelsHeight /*| DM.BitsPerPixel*/ | NativeMethods.DM.Position
                                 | NativeMethods.DM.DisplayFrequency | NativeMethods.DM.DisplayFlags;

            var ch = NativeMethods.ChangeDisplaySettingsEx(deviceName, ref devmode, IntPtr.Zero, NativeMethods.ChangeDisplaySettingsFlags.CDS_UPDATEREGISTRY | NativeMethods.ChangeDisplaySettingsFlags.CDS_NORESET, IntPtr.Zero);

            if (ch == NativeMethods.DISP_CHANGE.Successful && apply)
            {
                ApplyDesktop();
            }
        }
 public static void GetDisplaySettings()
 {
     List<NativeMethods.DEVMODE> settings = new List<NativeMethods.DEVMODE>();
     NativeMethods.DEVMODE mode = new NativeMethods.DEVMODE();
     mode.dmSize = (ushort)Marshal.SizeOf(mode);
     int modenum = 0;
     Console.WriteLine("Supported display modes:");
     while(NativeMethods.EnumDisplaySettings(null, modenum, ref mode))
     {
         settings.Add(mode);
         Console.WriteLine("\t{5}: {0}x{1}, {2} bpp, {3} deg., {4}Hz",
             mode.dmPelsWidth, mode.dmPelsHeight,
             mode.dmBitsPerPel,
             mode.dmDisplayOrientation * 90,
             mode.dmDisplayFrequency, mode.dmDeviceName);
         mode = new NativeMethods.DEVMODE();
         mode.dmSize = (ushort)Marshal.SizeOf(mode);
         modenum++;
     }
     Console.WriteLine("Got {0} display modes!", settings.Count);
 }
        /// <summary>
        /// Gets all available display settings.
        /// </summary>
        /// <returns>Array of possible screen resolutions.</returns>
        public static List<DisplaySettings> GetDisplaySettings()
        {
            var result = new Dictionary<string, DisplaySettings>();
            var devMode = new NativeMethods.DEVMODE();
            var modeNumber = 0;
            while (NativeMethods.EnumDisplaySettings(null, modeNumber++, ref devMode))
            {
                var ds = new DisplaySettings()
                   {
                       BitsPerPixel = devMode.dmBitsPerPel,
                       Flags = devMode.dmDisplayFlags,
                       Frequency = devMode.dmDisplayFrequency,
                       Height = devMode.dmPelsHeight,
                       Width = devMode.dmPelsWidth
                   };

                if (!result.ContainsKey(ds.ToString()))
                    result.Add(ds.ToString(), ds);
            }

            return result.Values.ToList();
        }
示例#10
0
        public static void GetDisplaySettings()
        {
            List <NativeMethods.DEVMODE> settings = new List <NativeMethods.DEVMODE>();

            NativeMethods.DEVMODE mode = new NativeMethods.DEVMODE();
            mode.dmSize = (ushort)Marshal.SizeOf(mode);
            int modenum = 0;

            Console.WriteLine("Supported display modes:");
            while (NativeMethods.EnumDisplaySettings(null, modenum, ref mode))
            {
                settings.Add(mode);
                Console.WriteLine("\t{5}: {0}x{1}, {2} bpp, {3} deg., {4}Hz",
                                  mode.dmPelsWidth, mode.dmPelsHeight,
                                  mode.dmBitsPerPel,
                                  mode.dmDisplayOrientation * 90,
                                  mode.dmDisplayFrequency, mode.dmDeviceName);
                mode        = new NativeMethods.DEVMODE();
                mode.dmSize = (ushort)Marshal.SizeOf(mode);
                modenum++;
            }
            Console.WriteLine("Got {0} display modes!", settings.Count);
        }
示例#11
0
 public static extern bool EnumDisplaySettings(string lpszDeviceName, int iModeNum, ref NativeMethods.DEVMODE lpDevMode);