Get e-mails with new posts.

Web Site

Display Changer

1 Display Changer changes the resolution.

1 Display Changer runs your application. (optional)

1 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 the monitors in a multiple-monitor setup. This is useful for games and home theater computers. I originally wrote this application for my children because they had programs that required 640×480 with 256 colors or 800×600 with 32-bit color or some other combination. I didn’t expect my (then) 4-year-old to be able to change Windows display settings, so I wrote this program to do it automatically.

Now, it does much more.

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 (Supports 32- and 64-bit for Windows and Console)

There are Windows and Console editions for both 32-bit and 64-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.

Commercial License

Display Changer is free for personal and educational use. 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 company computers), you must purchase a commercial license. In brief, a commercial license entitles your company to unlimited use of Display Changer.

Commercial License


Resellers: please contact me directly for pricing.

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. 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).
-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. 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 Set the monitor to use an interlaced resolution. (This switch may not work as Microsoft has labeled it “invalid.”)
-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.)

Examples

For the following examples, assume a monitor configuration that has two monitors, a Dell 2009 (1440 x 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, attached, primary (0,0)

Monitor: Dell 2007FP (Digital)
Device: \\.\DISPLAY2
Adapter: NVIDIA GeForce 8600 GT
(1280 x 1024 x 32 bpp) 60Hz, attached (1440,-128)

  1. 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 stops running. If you don’t specify a program, it will just change the settings for you (and not restore them).

    The “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.

  2. Open a certain spreadsheet at 1600×1200:

    dc.exe -width=1600 -height=1200 cmd /c "c:\Documents and Settings\Susan\Desktop\Report.xls"

  3. 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, attached, primary (0,0)

    Monitor: Dell 2007FP (Digital)
    Device: \\.\DISPLAY2
    Adapter: NVIDIA GeForce 8600 GT
    (1280 x 1024 x 32 bpp) 60Hz, 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, attached, primary (0,0)

    Monitor: Dell 2007FP (Digital)
    Device: \\.\DISPLAY2
    Adapter: NVIDIA GeForce 8600 GT
    (1600 x 1200 x 32 bpp) 60Hz

  4. 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, attached, primary (0,0)

    Monitor: Dell 2007FP (Digital)
    Device: \\.\DISPLAY2
    Adapter: NVIDIA GeForce 8600 GT
    (1280 x 1024 x 32 bpp) 60Hz, 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.

  5. Swap the position of two monitors—move 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

  6. Swap two monitors—make the primary monitor secondary and make 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 last 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

  7. Modify the resolution of a remote computer using the SysInternals PSexec utility.

    --> 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 box.

  8. Rotate the display to right, left, up, and 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 a monitor from right (clockwise portrait) to down (landscape).

    --> dccmd -rotate=down -width=1050 -height=1680

    Rotate a monitor from down (landscape) to the left (counter-clockwise portrait).

    --> dccmd -rotate=left -width=1680 -height=1050

    Rotate a monitor from left (counter-clockwise portrait) to right (clockwise portrait).

    --> dccmd -rotate=right -width=1050 -height=1680

    Rotate a monitor from right (clockwise portrait) to right-side up (landscape).

    --> dccmd -rotate=up -width=1050 -height=1680

    Rotate a monitor from up (landscape) to down (landscape).

    --> dccmd -rotate=down -width=1680 -height=1050

    Rotate a monitor from down (landscape) to up (landscape).

    --> dccmd -rotate=up -width=1680 -height=1050

Warning

Normally, Display Changer will prevent 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® 8 Desktop,  7, Vista, XP Home and Professional, and Windows Server 2003 and 2008. Display Changer has both 32-bit and 64-bit versions of both Console and Windows editions. It should also run on Windows 2000, Me, and NT, but I’m no longer able to test it on those platforms. If you need to run it on Windows 98, you can download version 3.12.

History

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