-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathrotate.cs
More file actions
124 lines (109 loc) · 4.28 KB
/
rotate.cs
File metadata and controls
124 lines (109 loc) · 4.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace roateScreen
{
class Program
{
static void Main(string[] args)
{
int direction = NativeMethods.DMDO_DEFAULT;
if ( args.Length != 0 )
{
if (args[0].Equals(@"up", StringComparison.OrdinalIgnoreCase))
direction = NativeMethods.DMDO_DEFAULT;
else if (args[0].Equals(@"down", StringComparison.OrdinalIgnoreCase))
direction = NativeMethods.DMDO_180;
else if (args[0].Equals(@"left", StringComparison.OrdinalIgnoreCase))
direction = NativeMethods.DMDO_270;
else if (args[0].Equals(@"right", StringComparison.OrdinalIgnoreCase))
direction = NativeMethods.DMDO_90;
}
NativeMethods.RotateTo( direction );
}
}
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;
}
public static void RotateTo(int direction)
{
DEVMODE dm = CreateDevmode();
EnumDisplaySettings(null, ENUM_CURRENT_SETTINGS, ref dm);
if ( ( ( ( direction == DMDO_DEFAULT) || ( direction == DMDO_180) ) && ( dm.dmPelsHeight > dm.dmPelsWidth ) ) ||
( ( ( direction == DMDO_270 ) || ( direction == DMDO_90 ) ) && ( dm.dmPelsHeight < dm.dmPelsWidth ) ) )
{
int temp = dm.dmPelsHeight;
dm.dmPelsHeight = dm.dmPelsWidth;
dm.dmPelsWidth = temp;
}
dm.dmDisplayOrientation = direction;
ChangeDisplaySettings(ref dm, 0);
}
// 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;
}
}