Display Changer

  1. Display Changer changes your monitor’s resolution.
  2. Display Changer runs your application. (optional)
  3. 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).

Download Windows and Console (64- and 32-bit)

There are Windows and Console editions for both 64-bit and 32-bit Windows. The Windows edition is best for creating shortcuts that quickly switch to the display configuration you want. The Console edition is best to use in a batch file or script.

Pricing

Display Changer is free for educational or non-profit personal use. (U.S. 501(c) organizations are one example.) If you’d like to use it in a commercial environment (e.g., to release with a product you sell, to release with a product you use internally, or to manage your organization’s computers), you must purchase a commercial license. A commercial license entitles your company to unlimited use of Display Changer. If a small number of employees need to use Display Changer, they can purchase a set of individual commercial licenses—one per machine.

Download the Commercial License

You can use any major credit card.

Alternatively, you can use Paypal:

Resellers: please contact me directly for special pricing.

Command Line

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

-testDoes not apply new settings. Reports if the settings are valid or not.
-quietEliminates any output the application would normally make.
-forceTry applying the settings even though Windows doesn’t list them as available.
-moreIndicates 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.

-applyIndicates there are no further calls and that all settings should be committed.
-resetDiscards any settings stored with -more (before -apply is used). This can be useful when you’re experimenting and change your mind about some settings.
-listmonitorsDisplay 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. For example:

dccmd.exe -monitor="Dell 2007FP (Digital)" -width=1024 -height=768

dccmd.exe -monitor="\\.\DISPLAY1" -width=1024 -height=768

These switches are monitor-specific. They apply to the monitor specified with the -monitor switch (or to the primary monitor if none is specified).

-listmodesDisplay 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.
-interlacedUse only interlaced resolutions. (Without this switch, Display Changer uses only progressive resolutions.)
-detachRemove the specified monitor from the display configuration. (Add a new monitor to the configuration with the -primary or -secondary switches.)
-primaryMake 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.)
-secondaryMake 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 | -belowPosition 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.)

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.

Requirements

Display Changer runs on Microsoft® Windows® 10 and 8.1. (It should also run on Windows 7, but since Microsoft has ended mainstream support, it’s not officially supported.) Display Changer has both 32-bit and 64-bit versions of both Console and Windows editions.

History

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?).