Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions Source/AutoActions.Displays/DisplayManagerBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -282,6 +282,14 @@ public void SetResolution(Display display, Size resolution)
{
dm.dmPelsHeight = Convert.ToInt32(resolution.Height);
dm.dmPelsWidth = Convert.ToInt32(resolution.Width);

// Some display drivers expose a fixed-output scaling mode for the
// current DSR/DLDSR resolution. That setting belongs to the current
// mode and can make an otherwise valid native resolution fail with
// DISP_CHANGE_BADMODE when it is carried over unchanged.
dm.dmFields |= DM.PelsWidth | DM.PelsHeight;
dm.dmFields &= ~DM.DisplayFixedOutput;
dm.dmDisplayFixedOutput = 0;
return dm;
};
ChangeDisplaySetting(display.ID, func);
Expand All @@ -308,6 +316,9 @@ private void ChangeDisplaySetting(uint deviceID, Func<DEVMODE, DEVMODE> func)
DISP_CHANGE iRet = NativeMethods.ChangeDisplaySettingsEx(
d.DeviceName, ref dm, IntPtr.Zero,
DisplaySettingsFlags.CDS_UPDATEREGISTRY, IntPtr.Zero);

if (iRet != DISP_CHANGE.Successful)
throw new InvalidOperationException($"Unable to change display settings for {d.DeviceName}: {iRet}");
}
}

Expand Down