2011-07-20 18 views
3

解像度、位置を変更し、どちらがメインディスプレイであるかを選択する必要があります。Windows 7で複数のディスプレイ設定をプログラム的に管理する方法は?

+0

良い質問... – Tocco

+0

参照http://stackoverflow.com/questions/5215001/multiple-monitors -in-net/5215080#5215080とhttp://stackoverflow.com/questions/195267/use-windows-api-from-c-to-set-primary-monitor – Yahia

+0

質問1:私の質問と質問に答えないでください2その良いが、扱いにくい、私はこれらのWindows APIのためのラッパーが.NETにあるのだろうかと思います – Rodney

答えて

5

私はあなたがUser32.dll API関数を使ってP/Invokeを使って行うことができると思います。
See the avaiable functions

サンプルコード:

[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); 

コード画面の解像度を変更する:

//DisplayDevice is a wrapper ... you can find it [here](http://pinvoke.net/default.aspx/Structures/DISPLAY_DEVICE.html) 
List<DisplayDevice> devices = new List<DisplayDevice>(); 

bool error = false; 
//Here I am listing all DisplayDevices (Monitors) 
for (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 I am listing all DeviceModes (Resolutions) for each DisplayDevice (Monitors) 
    for (int i = 0; !error; i++) 
    { 
     try 
     { 
      //DeviceMode is a wrapper. You can find it [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 any 800x600 resolution ... 
DeviceMode d800x600 = devicesAndModes.Where(s => s.DeviceMode.dmPelsWidth == 800).First().DeviceMode; 

//Apply the selected resolution ... 
ChangeDisplaySettings(ref d800x600, 0); 
関連する問題