Click here to Skip to main content
15,890,282 members
Articles / Programming Languages / C#

Set Primary Display (ChangeDisplaySettingsEx)

Rate me:
Please Sign up or sign in to vote.
5.00/5 (1 vote)
11 Aug 2009CPOL 65.3K   2.8K   18   6
Simplified code for setting the primary display on a multi-monitor PC.

Image 1

Introduction

I've seen plenty of "complicated" code for setting the "primary" display in a multiple display PC environment, but never a "simple" C# version. (This code is based off plenty of samples I've seen on the web.)

Background

This code originated out of the need to pop applications to multiple monitors during an automated start-up script (i.e., set a designated monitor as primary, start apps, then revert back to original monitor).

Using the code

The code is left raw for addition of "bells and whistles".

C#
//manual gather - NewPrimary name ----------------------------------
WinApi.DISPLAY_DEVICE ddOne = new WinApi.DISPLAY_DEVICE();

ddOne.cb = Marshal.SizeOf(ddOne);
deviceID = 1;
WinApi.User_32.EnumDisplayDevices(null, deviceID, ref ddOne, 0);
string NewPrimary = ddOne.DeviceName;

WinApi.DEVMODE ndm6 = NewDevMode();
result = (WinApi.DisplaySetting_Results)WinApi.User_32.ChangeDisplaySettingsEx(NewPrimary, 
          ref ndm6, (IntPtr)null, (int)WinApi.DeviceFlags.CDS_SET_PRIMARY | 
          (int)WinApi.DeviceFlags.CDS_UPDATEREGISTRY, IntPtr.Zero);
Console.WriteLine("Action 3.2 result:" + result.ToString());

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Systems Engineer
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
SuggestionWorking VB.Net "Conversion" Pin
LostIt127823-Jan-13 16:55
LostIt127823-Jan-13 16:55 
GeneralRe: Working VB.Net "Conversion" Pin
LostIt127824-Feb-13 7:59
LostIt127824-Feb-13 7:59 
GeneralDoes not work for me. Pin
Bill Langlais2-Nov-09 13:02
Bill Langlais2-Nov-09 13:02 
I have been trying to get this to work for several days with no luck. I am running on a Dell Vostro 1700 with a NVIDA video. The laptop display is 1920 x 1200 (17") and I am connected to a Samsung 24" 1920x1200 monitor. When I run the code the screens flash and the second monitor changes its position (from the right to the left of the display with the desktop). But the monitor that is displaying the start menu says as the desktop.

What I am trying to do is to make the external monitor the only display while turning off the laptop monitor.

Any help would be greatly apreciated
GeneralManually set monitor\display name Pin
beyonder42211-Aug-09 5:48
beyonder42211-Aug-09 5:48 
GeneralRe: Manually set monitor\display name Pin
The_Mega_ZZTer11-Aug-09 6:51
The_Mega_ZZTer11-Aug-09 6:51 
GeneralRe: Manually set monitor\display name Pin
dalek925-Aug-09 2:23
dalek925-Aug-09 2:23 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.