From: Mark Jansen Date: Sat, 27 May 2017 09:37:16 +0000 (+0000) Subject: [SYSSETUP][UNATTENDED] Allow changing the resolution automatically. CORE-13315 X-Git-Tag: ReactOS-0.4.6~615 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=31391c60b173d82af9e29c2e89bffefb3e858197;ds=sidebyside [SYSSETUP][UNATTENDED] Allow changing the resolution automatically. CORE-13315 svn path=/trunk/; revision=74679 --- diff --git a/reactos/boot/bootdata/bootcd/unattend.inf b/reactos/boot/bootdata/bootcd/unattend.inf index 23206c8985b..1bc74a83010 100644 --- a/reactos/boot/bootdata/bootcd/unattend.inf +++ b/reactos/boot/bootdata/bootcd/unattend.inf @@ -56,3 +56,11 @@ LocaleID = 409 ; [GuiRunOnce] ; %SystemRoot%\system32\cmd.exe + +; enable this section to change resolution / bpp +; setting a value to 0 or skipping it will leave it unchanged +; [Display] +; BitsPerPel = 32 +; XResolution = 1440 +; YResolution = 900 +; VRefresh = 0 diff --git a/reactos/dll/win32/syssetup/wizard.c b/reactos/dll/win32/syssetup/wizard.c index 461998c3075..d34f79ea3a0 100644 --- a/reactos/dll/win32/syssetup/wizard.c +++ b/reactos/dll/win32/syssetup/wizard.c @@ -2211,6 +2211,70 @@ ProcessUnattendInf( } while (SetupFindNextLine(&InfContext, &InfContext)); + if (SetupFindFirstLineW(pSetupData->hUnattendedInf, + L"Display", + NULL, + &InfContext)) + { + DEVMODEW dm = { { 0 } }; + dm.dmSize = sizeof(dm); + if (EnumDisplaySettingsW(NULL, ENUM_CURRENT_SETTINGS, &dm)) + { + do + { + int iValue; + if (!SetupGetStringFieldW(&InfContext, + 0, + szName, + sizeof(szName) / sizeof(WCHAR), + &LineLength)) + { + DPRINT1("Error: SetupGetStringField failed with %d\n", GetLastError()); + return; + } + + if (!SetupGetStringFieldW(&InfContext, + 1, + szValue, + sizeof(szValue) / sizeof(WCHAR), + &LineLength)) + { + DPRINT1("Error: SetupGetStringField failed with %d\n", GetLastError()); + return; + } + iValue = _wtoi(szValue); + DPRINT1("Name %S Value %i\n", szName, iValue); + + if (!iValue) + continue; + + if (!wcscmp(szName, L"BitsPerPel")) + { + dm.dmFields |= DM_BITSPERPEL; + dm.dmBitsPerPel = iValue; + } + else if (!wcscmp(szName, L"XResolution")) + { + dm.dmFields |= DM_PELSWIDTH; + dm.dmPelsWidth = iValue; + } + else if (!wcscmp(szName, L"YResolution")) + { + dm.dmFields |= DM_PELSHEIGHT; + dm.dmPelsHeight = iValue; + } + else if (!wcscmp(szName, L"VRefresh")) + { + dm.dmFields |= DM_DISPLAYFREQUENCY; + dm.dmDisplayFrequency = iValue; + } + } + while (SetupFindNextLine(&InfContext, &InfContext)); + + ChangeDisplaySettingsW(&dm, CDS_UPDATEREGISTRY); + } + } + if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunOnce", 0,