public static string Rotate(int angle, int width, int height, string deviceName)
{
var originalMode = new Devmode();
originalMode.dmSize = (short) Marshal.SizeOf(originalMode);
EnumDisplaySettings(deviceName, ENUM_CURRENT_SETTINGS, ref originalMode);
// swap height and width
var temp = originalMode.dmPelsHeight;
originalMode.dmPelsHeight = originalMode.dmPelsWidth;
originalMode.dmPelsWidth = temp;
originalMode.dmPelsWidth = width;
originalMode.dmPelsHeight = height;
switch (angle)
{
case 0:
originalMode.dmDisplayOrientation = ScreenOrientation.Angle0;
break;
case 90:
originalMode.dmDisplayOrientation = ScreenOrientation.Angle90;
break;
case 180:
originalMode.dmDisplayOrientation = ScreenOrientation.Angle180;
break;
case 270:
originalMode.dmDisplayOrientation = ScreenOrientation.Angle270;
break;
}
return GetMessageForCode(ChangeDisplaySettingsEx(deviceName, ref originalMode, IntPtr.Zero,
ChangeDisplaySettingsFlags.CDS_UPDATEREGISTRY, IntPtr.Zero));
}