/// <summary>Gets the available resolutions for a display device.</summary> public IEnumerable <Size> GetResolutions(string?deviceName = null) { WindowsApi.DEVMODEW mode = new WindowsApi.DEVMODEW(); mode.Init(); uint modeNum = 0; while (WindowsApi.EnumDisplaySettingsEx(deviceName, modeNum++, ref mode, 0)) { yield return(new Size((int)mode.dmPelsWidth, (int)mode.dmPelsHeight)); } }
private static Size Resolution(Size?newSize, string?deviceName = null) { WindowsApi.DEVMODEW mode = new WindowsApi.DEVMODEW(); mode.Init(); // When setting, the current display still needs to be retrieved, to pre-fill the mode struct. WindowsApi.EnumDisplaySettingsEx(deviceName, WindowsApi.ENUM_CURRENT_SETTINGS, ref mode, 0); Size originalSize = new Size((int)mode.dmPelsWidth, (int)mode.dmPelsHeight); if (newSize.HasValue) { const uint CDS_UPDATEREGISTRY = 1; mode.dmPelsWidth = (uint)newSize.Value.Width; mode.dmPelsHeight = (uint)newSize.Value.Height; WindowsApi.ChangeDisplaySettingsEx(deviceName, ref mode, IntPtr.Zero, CDS_UPDATEREGISTRY, IntPtr.Zero); } return(originalSize); }