DEVMODE dm = NativeMethods.CreateDevmode();GetSettings(ref dm);
int temp = dm.dmPelsHeight;
dm.dmPelsHeight = dm.dmPelsWidth;
dm.dmPelsWidth = temp;

int index = Array.IndexOf(orientationValues, (object)dm.dmDisplayOrientation);
int newIndex = (index == 0) ? 3 : index - 1;

dm.dmDisplayOrientation = orientationValues[newIndex];
ChangeSettings(dm);

private void ChangeSettings(DEVMODE dm){ NativeMethods.ChangeDisplaySettings(ref dm, 0);}
private int GetSettings(ref DEVMODE dm){    return GetSettings(ref dm, NativeMethods.ENUM_CURRENT_SETTINGS);}
private int GetSettings(ref DEVMODE dm, int iModeNum){    return NativeMethods.EnumDisplaySettings(null, iModeNum, ref dm);}

 

NativeMethods 클래스 관련 부분:

//-------------------------------------------------------------------------- 
// 
//  Copyright (c) Microsoft Corporation.  All rights reserved. 
// 
//  File: NativeMethods.cs 
//			C# file for the DisplaySettingsSample application
// 
//-------------------------------------------------------------------------- 
using System;
using System.Runtime.InteropServices;

namespace DisplaySettingsSample
{
	[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Ansi)]
	public struct DEVMODE 
	{
		[MarshalAs(UnmanagedType.ByValTStr,SizeConst=32)]
		public string dmDeviceName;
		
		public short  dmSpecVersion;
		public short  dmDriverVersion;
		public short  dmSize;
		public short  dmDriverExtra;
		public int    dmFields;
		public int    dmPositionX;
		public int    dmPositionY;
		public int    dmDisplayOrientation;
		public int    dmDisplayFixedOutput;
		public short  dmColor;
		public short  dmDuplex;
		public short  dmYResolution;
		public short  dmTTOption;
		public short  dmCollate;

		[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 32)]
		public string dmFormName;

		public short  dmLogPixels;
		public short  dmBitsPerPel;
		public int    dmPelsWidth;
		public int    dmPelsHeight;
		public int    dmDisplayFlags;
		public int    dmDisplayFrequency;
		public int    dmICMMethod;
		public int    dmICMIntent;
		public int    dmMediaType;
		public int    dmDitherType;
		public int    dmReserved1;
		public int    dmReserved2;
		public int    dmPanningWidth;
		public int    dmPanningHeight;
	};

	public class NativeMethods
	{
		// PInvoke declaration for EnumDisplaySettings Win32 API
		[DllImport("user32.dll", CharSet=CharSet.Ansi)]
		public static extern int EnumDisplaySettings(string lpszDeviceName, int iModeNum, ref DEVMODE lpDevMode);         

		// PInvoke declaration for ChangeDisplaySettings Win32 API
		[DllImport("user32.dll", CharSet=CharSet.Ansi)]
		public static extern int ChangeDisplaySettings(ref DEVMODE lpDevMode, int dwFlags);

		// helper for creating an initialized DEVMODE structure
		public static DEVMODE CreateDevmode()
		{
			DEVMODE dm = new DEVMODE();
			dm.dmDeviceName = new String(new char[32]);
			dm.dmFormName = new String(new char[32]);
			dm.dmSize = (short)Marshal.SizeOf(dm);
			return dm;
		}

		// constants
		public const int ENUM_CURRENT_SETTINGS = -1;
		public const int DISP_CHANGE_SUCCESSFUL = 0;
		public const int DISP_CHANGE_BADDUALVIEW = -6;
		public const int DISP_CHANGE_BADFLAGS = -4;
		public const int DISP_CHANGE_BADMODE = -2;
		public const int DISP_CHANGE_BADPARAM = -5;
		public const int DISP_CHANGE_FAILED = -1;
		public const int DISP_CHANGE_NOTUPDATED = -3;
		public const int DISP_CHANGE_RESTART = 1;
		public const int DMDO_DEFAULT = 0;
		public const int DMDO_90 = 1;
		public const int DMDO_180 = 2;
		public const int DMDO_270 = 3;
	}
}