Late to the party but this is what I have worked out. I use the Windows Task Scheduler & DisplayChanger.
Afterwards anytime the csgo.exe program is started, your display settings will immediately be changed before the CSGO splash screen is shown, and a split second or so after csgo.exe window closes the desktop will change back to your default resolution.
Setup Display Switcher
First grab DC2 from the link above and extract it somewhere, say C:\DisplayChanger\
.
Next you want to generate your Display Changer config files.
- Use the Windows Display Settings to set your monitor(s) resolution the way you want it by default.
In CMD or PowerShell navigate to the
C:\DisplayChanger
or similar directory and run dc2.exe -create="default.xml"
.
- Back in Windows Display Settings change to your preferred CS:Go (or other games) preferred resolution.
In CMD or PowerShell run
dc2.exe -create="csgo.xml"
.
This gives you 2 quick configs to switch between, here is what mine looks like currently at C:\DisplaySwitcher\csgo.xml
.
<monitors app-version="1.7.0.32" version="3" topology="Extend">
<!--The version identifies the format of the configuration file.-->
<!--topology=-->
<!--Internal, Clone, Extend, External-->
<!--The monitor ID attribute must be specified.-->
<monitor active="true" virtual="false" id="265988" id-FFFF="true" adapterHigh="0" adapterLow="76089">
<name>LQ156M1JW03</name>
<!--source: the origin of the video signal-->
<source id="0">
<name>\\.\DISPLAY1</name>
<path>\\?\PCI#VEN_8086&DEV_3E9B&SUBSYS_16621458&REV_00#3&11583659&0&10#{5b45201d-f2f2-4f3b-85bb-30ff1f953599}</path>
</source>
<size width="1280" height="960"/>
<position left="0" top="0"/>
<!--8bpp, 16bpp, 24bpp, 32bpp, Non-GDI-->
<color value="32bpp"/>
<!--Identity, 90-degreesCW, 180-degreesCW, 270-degreesCW-->
<rotation value="Identity"/>
<!--Identity, Centered, Stretched, Aspect Ratio Centered Max, Custom, Preferred-->
<scaling value="Stretched"/>
<!--A value of 0/0 represents the optimal refresh rate. Scan-line-order must be Unspecified.-->
<refresh numerator="533280000" denominator="2222000"/>
<!--Unspecified, Progressive, Interlaced (upper field first), Interlaced (lower field first)-->
<scanlineorder value="Progressive"/>
</monitor>
</monitors>
NOTES:
- It supports configuring multiple displays, so when editing the config xml files, be sure to find the correct section for each monitor you need to adjust.
- If you want 4:3 Scaled, set your resolution to 1280:960* and you may need to edit your
csgo.xml
config file, changing the following line for your display:
<!--Identity, Centered, Stretched, Aspect Ratio Centered Max, Custom, Preferred-->
<scaling value="Stretched"/>
Enable Application Start Logging & Creating Tasks
Follow this this guide to enable application logging as needed and understand how these tasks are set up. But once you have logging enabled and to save you time & the headache, here are my working tasks. Save these as .xml files and use the Import Task... option in the right sidebar:

"CSGO Change Resolution" task
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Date>2020-07-25T11:07:41.3197953</Date>
<Author>Daniel Iser @daniel_iser</Author>
<URI>\CSGO Change Resolution</URI>
</RegistrationInfo>
<Triggers>
<EventTrigger>
<Enabled>true</Enabled>
<Subscription><QueryList><Query Id="0" Path="Security"><Select Path="Security">*[System[Provider[@Name='Microsoft-Windows-Security-Auditing' or @Name='Microsoft'] and Task = 13312 and (band(Keywords,9007199254740992)) and (EventID=4688)]]
and
*[EventData[Data[@Name='NewProcessName'] and (Data='C:\Program Files (x86)\Steam\steamapps\common\Counter-Strike Global Offensive\csgo.exe')]]
</Select></Query></QueryList></Subscription>
</EventTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>S-1-5-21-3381179310-2398056333-3294365952-1001</UserId>
<LogonType>InteractiveToken</LogonType>
<RunLevel>LeastPrivilege</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
<AllowHardTerminate>false</AllowHardTerminate>
<StartWhenAvailable>false</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Author">
<Exec>
<Command>"dc2.exe"</Command>
<Arguments>-configure="csgo.xml"</Arguments>
<WorkingDirectory>C:\DisplayChanger\</WorkingDirectory>
</Exec>
</Actions>
</Task>
"CSGO Reset Resolution" task
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Date>2020-07-25T11:07:41.3197953</Date>
<Author>DESKTOP-NMFHG23\Daniel</Author>
<URI>\CSGO Reset Screen Resolution</URI>
</RegistrationInfo>
<Triggers>
<EventTrigger>
<Enabled>true</Enabled>
<Subscription><QueryList><Query Id="0" Path="Security"><Select Path="Security">
*[System[Provider[@Name='Microsoft-Windows-Security-Auditing'] and (band(Keywords,9007199254740992)) and (EventID=4689)]]
and
*[EventData[(Data='C:\Program Files (x86)\Steam\steamapps\common\Counter-Strike Global Offensive\csgo.exe')]]
</Select></Query></QueryList></Subscription>
</EventTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>S-1-5-21-3381179310-2398056333-3294365952-1001</UserId>
<LogonType>InteractiveToken</LogonType>
<RunLevel>LeastPrivilege</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
<AllowHardTerminate>false</AllowHardTerminate>
<StartWhenAvailable>false</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Author">
<Exec>
<Command>"dc2.exe"</Command>
<Arguments>-configure="Default.xml"</Arguments>
<WorkingDirectory>C:\DisplayChanger\</WorkingDirectory>
</Exec>
</Actions>
</Task>
You can pretty manually run each task to ensure they do switch display settings correctly. If not its likely a path issue.
Be sure to adjust your CS:GO aspect ratio and screen size settings to match appropriately but if you have been doing this manually up til now you already have them set.\
This is confirmed working on Windows 10 @latest