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(); } }
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; }
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++; } }
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(); }
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); }
public static extern bool EnumDisplaySettings(string lpszDeviceName, int iModeNum, ref NativeMethods.DEVMODE lpDevMode);