c# - How to manage multiple display setting in Windows 7 programatically? -
i need change resolution, position, , select 1 main display, preferably in .net.
i think can using user32.dll api functions via p/invoke.
 see avaiable functions. 
sample code:
[dllimport("user32.dll")] static extern long changedisplaysettings(ref devicemode lpdevmode, int dwflags);  [dllimport("user32.dll")] static extern int enumdisplaysettings(string lpszdevicename, int imodenum, ref devicemode lpdevmode);  [dllimport("user32.dll")] static extern int enumdisplaydevices(string lpdevice, int idevnum, ref displaydevice lpdisplaydevice, int dwflags); code changing screen resolution:
//displaydevice wrapper ... can find [here](http://pinvoke.net/default.aspx/structures/display_device.html) list<displaydevice> devices = new list<displaydevice>();  bool error = false; //here listing displaydevices (monitors) (int devid = 0; !error; devid++) {     try     {         displaydevice device = new displaydevice();         device.cb = marshal.sizeof(typeof(displaydevice));         error = enumdisplaydevices(null, devid, ref device, 0) == 0;         devices.add(device);     }     catch (exception)     {         error = true;     } }  list<displayset> devicesandmodes = new list<displayset>();  foreach (var dev in devices) {     error = false;     //here listing devicemodes (resolutions) each displaydevice (monitors)     (int = 0; !error; i++)     {         try         {             //devicemode wrapper. can find [here](http://pinvoke.net/default.aspx/structures/devmode.html)             devicemode mode = new devicemode();             error = enumdisplaysettings(dev.devicename, -1 + i, ref mode) == 0;             //display              devicesandmodes.add(new displayset { displaydevice = dev, devicemode = mode });         }         catch (exception ex)         {             error = true;         }     } }  //select 800x600 resolution ... devicemode d800x600 = devicesandmodes.where(s => s.devicemode.dmpelswidth == 800).first().devicemode;  //apply selected resolution ... changedisplaysettings(ref d800x600, 0); 
Comments
Post a Comment