Display Changer has been superseded by Display Changer X.
Existing customers: If you have purchased a license for Display Changer and need to download the software again, please use the Support page to contact us, and we will send you a custom link.
Change the resolution of any Windows display (width, height, color depth, and refresh rate) permanently or only while a specific application is running. Display Changer can also add, detach, and rearrange the displays in a multiple-monitor setup. This is useful for games and home-theater computers. Display Changer uses command-line switches to specify settings, which can be useful when configuring multiple machines.
- Display Changer changes your monitor’s resolution.
- Display Changer runs your application. (optional)
- Display Changer restores the original resolution. (optional)
Display Changer changes the display resolution, runs a program, then restores the original settings. It can also change the resolution permanently and rearrange monitors in a multiple-monitor setup. This is useful for games, home-theater computers, and more. I wrote Display Changer because there are programs that require 640×480 with 256 colors or home-theater setups that want 1920×1080 with a 24 Hz refresh rate. Instead of changing Windows display settings manually, I wrote Display Changer to do it automatically.
Display Changer changes your desktop width, height, color depth, and refresh rate (frequency) temporarily or permanently (via command line switches). Display Changer can run another application in a specific display resolution and return to the previous resolution when the application finishes. Command line switches let you alter only certain settings and choose the best refresh rate (or a specific one).
Requirements
Display Changer supports Microsoft® Windows® 11 and 10. (It should also work with Windows 8.1 and 7, but since Microsoft has ended mainstream support, it is not officially supported.)
Usage
dc.exe {switches} [program [switches for program]]
If you don’t specify a program on the command line, Display Changer will simply change the resolution of the specified (or default) monitor.
By default, Display Changer assumes that you want to use progressive refresh rates. To use interlaced refresh rates, add the -interlaced
switch.
Some applications (e.g., Steam) run additional applications and then exit, which confuses Display Changer so that it restores the resolution even though those “child” programs are still running. Sometimes you can find out the command line the application used to run those child processes and pass that to Display Changer. However, it’s probably easier to create a batch file like this:
dccmd.exe -width=640 -height=480 -depth=8 -refresh=72
"C:\Program Files\Hasbro\Freddi.exe"
dccmd.exe -width=max -height=max -refresh=max -depth=max
Switches
-test | Does not apply new settings. Reports if the settings are valid or not. |
-quiet | Eliminates any output the application would normally make. |
-force | Try applying the settings even though Windows doesn’t list them as available. |
-more | Indicates there will be further calls to specify settings for additional monitors. That also means the settings will be permanent—stored in the Registry (until you change them again).
You need to use this switch when repositioning multiple monitors. |
-apply | Indicates there are no further calls and that all settings should be committed. |
-reset | Discards any settings stored with -more (before -apply is used). This can be useful when you’re experimenting and change your mind about some settings. |
-listmonitors | Display a list of your current monitors, including the monitor name (e.g., “Dell 2007FP (Digital)”), display name (e.g., “\\.\DISPLAY1”), and current resolution and position. You can use the friendly name as long as it’s unique among your monitors, but if your monitors are all the same model, you will need to use the device name. It will also display the word “primary” if the monitor is the main display. |
-monitor={name} | Specify which monitor to operate on. (If none is specified, the primary monitor is used.) Please note that this switch cannot be used to control where the application appears—that’s something only the application can decide. (See below for how to change the “generic” name of a monitor.) For example:
|
The following switches are monitor-specific. They apply to the monitor specified with the -monitor
switch (or to the primary monitor if none is specified).
-listmodes | Display all available resolutions (width, height, color depth, and frequency). You can use the -width , -height , -depth , and -refresh switches to constrain the list to only those resolutions that match the specified value. |
-width={ # | max } | Set the width of the specified monitor. If you don’t specify a value, it uses the specified monitor’s current value, so you almost always need to specify the height as well. If you pass “max” as the value, it will select the largest value that also matches the other settings you specify. |
-height={ # | max } | Set the height of the specified monitor. If you don’t specify a value, it uses the specified monitor’s current value, so you almost always need to specify the width as well. If you pass “max” as the value, it will select the largest value that also matches the other settings you specify. |
-depth={ # | max } | Set the color depth of the specified monitor. “8” represents an 8-bit color depth or 256 colors. “4” is 16 colors; “16” for 16-bit; “24” for 24-bit; “32” for 32-bit. If you don’t specify a value, it uses the specified monitor’s current value. If you pass “max” as the value, it will select the largest value that also matches the other settings you specify. |
-refresh={ # | max } | Set the refresh rate (display frequency) of the specified monitor. If you don’t specify a value, it uses the specified monitor’s current value. If you pass “max” as the value, it will select the largest value that also matches the other settings you specify. |
-rotate={ left | right | up | down } | If your display supports this, it will rotate the display to the specified orientation. (Note: The specified orientation indicates which way you have to rotate your monitor for the display to be right-side up.) |
-fixedoutput={ default | stretch | center } | Specify how the monitor will display the image. (This setting may not be supported by all monitors or video cards.) Default tells the monitor to perform its default behavior (either stretch or center). Stretch tells the monitor to stretch the image to fill the screen. Center tells the monitor to center the image at the specified resolution. |
-interlaced | Use only interlaced resolutions. (Without this switch, Display Changer uses only progressive resolutions.) |
-detach | Remove the specified monitor from the display configuration. (Add a new monitor to the configuration with the -primary or -secondary switches.) |
-primary | Make the specified monitor the primary monitor. (You will also need to use the -more switch to either detach the current primary monitor or re-position it.) |
-secondary | Make the specified monitor a secondary monitor. (A secondary monitor is one that isn’t primary; even the third or fourth monitors are secondary.) When making a monitor secondary (i.e., not primary), you will almost certainly also have to specify its new position (relative to the new primary monitor), using one of the below switches. |
-left | -right | -top | -bottom | -above | -below | Position the specified monitor on the specified side of the primary monitor. (This is a faster and easier way to position a monitor.) Alternatively, you can use the -lx and -ty switches. The above/below switches are synonyms for top/bottom. |
-lx=# | Position the specified monitor so its left side is at this x-coordinate (relative to the primary monitor). (Note that at least one pixel must be adjacent to another monitor for this to work.) |
-ty=# | Position the specified monitor so its top side is at this y-coordinate (relative to the primary monitor). (Note that at least one pixel must be adjacent to another monitor for this to work.) |
Monitor Name
If a monitor’s name is given as “Generic PnP Monitor,” you may want to change it to a unique name so that you can manage it with Display Changer more easily. At this time, the only method I know of is to edit the Windows Registry.
- Run the Registry Editor as administrator.
- Open this key:
HKLM \ SYSTEM \ CurrentControlSet \ Enum \ DISPLAY \
- Open the appropriate key for the monitor you are renaming.
- Open the key under the monitor’s key.
- Edit the
DeviceDesc
value. - The monitor’s name is the string after the final semicolon (;). Modify this part of the string to be the desired monitor name. (See image below.)
Troubleshooting
When Display Changer sets a configuration, if you do not specify the value for a parameter, DC uses the current configuration’s value for it. If your Display Changer command line does not change your display configuration as expected, it may be that your desired configuration does not support the current value for that parameter.
For example, you might be using 1280×720 and find that Display Changer can not change to 3440×1440. You know your monitor supports 3440×1440, so why doesn’t this work?
> dc64cmd -width=3440 -height=1440
First, configure your monitor(s) to the desired configuration. Run this command to see the settings:
> dc64cmd -listmonitors
Monitor: Dell U3417W(miniDisplayPort)
Device: \\.\DISPLAY1
Adapter: Radeon RX Vega
(3440 x 1440 x 32 bpp) 60Hz default up, attached, primary (0,0)
Next, configure your monitor(s) to the initial configuration. Run this command to see the settings:
> dc64cmd -listmonitors
Monitor: Dell U3417W(miniDisplayPort)
Device: \\.\DISPLAY1
Adapter: Radeon RX Vega
(1280 x 720 x 32 bpp) 60Hz stretch up, attached, primary (0,0)
Note the values that do not match.
Run these commands to list the available settings for the two resolutions:
> dc64cmd.exe -listmodes -width=3440
3440 1440 32 50
3440 1440 32 60
> dc64cmd.exe -listmodes -width=1280 -height=720
1280 720 32 50
1280 720 32 59
1280 720 32 60
1280 720 32 60 center
1280 720 32 60 stretch
Note that the desired 3440×1440 resolution does not support stretch
. Since your initial command does not specify a value for -fixedoutput
, Display Changer tries using the current value (stretch
) which is not supported by 3440×1440.
To make it work, you must specify a value for -fixedoutput
.
> dc64cmd -width=3440 -height=1440 -fixedoutput=default
In this example, you do not need to specify the color depth or refresh rate because both resolutions support 32bpp and 60Hz. However, in other circumstances, you might find similar issues with color depth and refresh rate.
Examples
For the following examples, we use a monitor configuration with two monitors, a Dell 2009 (1440×900)—primary—and a Dell 2007 (1280×1024) on the right.
> dccmd -listmonitors
Monitor: Dell 2009W(Digital)
Device: \\.\DISPLAY1
Adapter: NVIDIA GeForce 8600 GT
(1440 x 900 x 32 bpp) 60Hz default up, attached, primary (0,0)
Monitor: Dell 2007FP (Digital)
Device: \\.\DISPLAY2
Adapter: NVIDIA GeForce 8600 GT
(1280 x 1024 x 32 bpp) 60Hz default up, attached (1440,-128)
Change default monitor’s resolution to 1600×1200 (keep same refresh rate and color depth)
dc.exe -width=1600 -height=1200
Change default monitor’s resolution to 1600×1200 with maximum refresh rate and color depth)
dc.exe -width=1600 -height=1200 -refresh=max -depth=max
Run an application with a temporary resolution
If you have an application that requires certain display settings (e.g., many children’s programs require 640x480x256 colors), you can modify that program’s shortcut to something like this:
dc.exe -width=640 -height=480 -depth=8 -refresh=72 "c:\Program Files\Hasbro\Freddi.exe"
This shortcut will change to VGA resolution, run freddi.exe, and then restore the original display settings when Freddi.exe
exits.
Open a spreadsheet at 1600×1200 and restore the resolution when you close it
dc.exe -width=1600 -height=1200 cmd /c "c:\Documents and Settings\Susan\Desktop\Report.xls"
Remove a monitor by specifying -detach
> dccmd.exe -listmonitors
Monitor: Dell 2009W(Digital)
Device: \\.\DISPLAY1
Adapter: NVIDIA GeForce 8600 GT
(1440 x 900 x 32 bpp) 60Hz default up, attached, primary (0,0)
Monitor: Dell 2007FP (Digital)
Device: \\.\DISPLAY2
Adapter: NVIDIA GeForce 8600 GT
(1280 x 1024 x 32 bpp) 60Hz default up, attached (1440,-128)
> dccmd.exe -monitor="Dell 2007FP (Digital)" -detach
> dccmd.exe -listmonitors
Monitor: Dell 2009W(Digital)
Device: \\.\DISPLAY1
Adapter: NVIDIA GeForce 8600 GT
(1440 x 900 x 32 bpp) 60Hz default up, attached, primary (0,0)
Monitor: Dell 2007FP (Digital)
Device: \\.\DISPLAY2
Adapter: NVIDIA GeForce 8600 GT
(1600 x 1200 x 32 bpp) 60Hz default up
Add a monitor by specifying its name, size, and position
> dccmd.exe -monitor="\\.\DISPLAY2" -secondary -width=1280 -height=1024 -ty=-128 -lx=1440
> dccmd.exe -listmonitors
Monitor: Dell 2009W(Digital)
Device: \\.\DISPLAY1
Adapter: NVIDIA GeForce 8600 GT
(1440 x 900 x 32 bpp) 60Hz default up, attached, primary (0,0)
Monitor: Dell 2007FP (Digital)
Device: \\.\DISPLAY2
Adapter: NVIDIA GeForce 8600 GT
(1280 x 1024 x 32 bpp) 60Hz default up, attached (1440,-128)
If you don’t specify the size, it will use the native resolution of the monitor. Some systems don’t know the friendly name of a detached monitor. In that case, you need to use the device name.
Swap the positions of two monitors
This moves the secondary monitor on the right of the primary to the left of it. So if we have A(primary)-B
, after these commands we’ll have B-A(primary)
.
dccmd.exe -monitor="Dell 2009W(Digital)" -left
Swap two monitors
This makes the primary monitor secondary and the secondary one primary. So if we have A(primary)-B
, after these commands we’ll have B(primary)-A
. (Use -more
switch when configuring more than one monitor. For the final configuration, specify -apply
.)
> dccmd.exe -monitor="Dell 2007FP (Digital)" -more -primary
You will need to use the -apply
switch to activate the changes.
> dccmd.exe -monitor="Dell 2009W(Digital)" -apply -secondary -lx=-1280 -ty=128
Modify the resolution of a remote computer
This uses the Microsoft SysInternals PSexec application.
> psexec /accepteula -c -i \\%MACHINENAME% -u %USERNAME% -p %PASSWORD% %PATH-TO-FILE%\dccmd.exe -monitor="\\.\DISPLAY1" -width=1024 -height=768
The -i switch is required because DC must operate on an active session (otherwise there’s no display to operate on).
You don’t need the -c switch if dccmd.exe
is already on the remote machine and you know its path.
You can use -s to run as the System account, provided the user running PSexec is an administrator of that remote machine.
Orient the display right, left, up, or down
Note that the width and height switches must match the current display dimensions.
Rotate the display from right-side up (landscape) to the right (clockwise portrait).
dccmd -rotate=right -width=1680 -height=1050
Rotate the display from right (clockwise portrait) to down (upside-down landscape).
dccmd -rotate=down -width=1050 -height=1680
Rotate the display from down (landscape) to the left (anti-clockwise portrait).
dccmd -rotate=left -width=1680 -height=1050
Rotate the display from left (anti-clockwise portrait) to right (clockwise portrait).
dccmd -rotate=right -width=1050 -height=1680
Rotate the display from right (clockwise portrait) to right-side up (landscape).
dccmd -rotate=up -width=1050 -height=1680
Rotate the display from up (landscape) to down (landscape).
dccmd -rotate=down -width=1680 -height=1050
Rotate the display from down (landscape) to up (landscape).
dccmd -rotate=up -width=1680 -height=1050
Warning
Normally, Display Changer prevents you from using a mode that is not supported by your video card and monitor. You can use the -force
switch to use an unlisted video mode. Please be aware that you can damage your video card or monitor by using an unsupported mode. 12noon assumes no responsibility or liability for your use of Display Changer.
Sometimes, even with -force
, Windows won’t let it use that resolution. You can sometimes work around that by going to Display Properties > Settings > Advanced > Monitor. On that page, clear the Hide modes that this monitor cannot display check box.
History
4.6.0: Added new method to extract monitor name. This often works when a previous version would return “Generic PnP Monitor.”
4.5.0: Updated to Visual Studio 2022.
4.4.2: Fixed another regression that incorrectly handled arguments on the command line with quotation marks.
4.4.1: Fixed a regression that incorrectly handled arguments to the application specified on the command line
4.4.0: Use progressive settings by default.
4.3.3: Build with latest runtime library.
4.3.2: Fix documentation for -top/-bottom switches. It should have read -above/-below. Now they all work.
4.3.1: Fix rotating by 90-degree increments.
4.3.0: Correctly fail phantom monitors caused by proprietary cables (and other things?).