1 /**
2 * Windows API header module
3 *
4 * Translated from MinGW Windows headers
5 *
6 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
7 * Source: $(DRUNTIMESRC src/core/sys/windows/_wincon.d)
8 */
9 module core.sys.windows.wincon;
version(Windows)10 version (Windows):
11 @system:
12
13 version (ANSI) {} else version = Unicode;
14 pragma(lib, "kernel32");
15
16 import core.sys.windows.w32api, core.sys.windows.windef;
17
18 // FIXME: clean up Windows version support
19
20 enum {
21 FOREGROUND_BLUE = 0x0001,
22 FOREGROUND_GREEN = 0x0002,
23 FOREGROUND_RED = 0x0004,
24 FOREGROUND_INTENSITY = 0x0008,
25 BACKGROUND_BLUE = 0x0010,
26 BACKGROUND_GREEN = 0x0020,
27 BACKGROUND_RED = 0x0040,
28 BACKGROUND_INTENSITY = 0x0080,
29
30 COMMON_LVB_LEADING_BYTE = 0x0100,
31 COMMON_LVB_TRAILING_BYTE = 0x0200,
32 COMMON_LVB_GRID_HORIZONTAL = 0x0400,
33 COMMON_LVB_GRID_LVERTICAL = 0x0800,
34 COMMON_LVB_GRID_RVERTICAL = 0x1000,
35 COMMON_LVB_REVERSE_VIDEO = 0x4000,
36 COMMON_LVB_UNDERSCORE = 0x8000,
37
38 COMMON_LVB_SBCSDBCS = 0x0300,
39 }
40
41 static if (_WIN32_WINNT >= 0x501) {
42 enum {
43 CONSOLE_FULLSCREEN_MODE = 1,
44 CONSOLE_WINDOWED_MODE = 0
45 }
46 }
47
48 enum {
49 CTRL_C_EVENT = 0,
50 CTRL_BREAK_EVENT = 1,
51 CTRL_CLOSE_EVENT = 2,
52 CTRL_LOGOFF_EVENT = 5,
53 CTRL_SHUTDOWN_EVENT = 6
54 }
55
56 enum {
57 ENABLE_PROCESSED_INPUT = 1,
58 ENABLE_LINE_INPUT = 2,
59 ENABLE_ECHO_INPUT = 4,
60 ENABLE_WINDOW_INPUT = 8,
61 ENABLE_MOUSE_INPUT = 16,
62 ENABLE_INSERT_MODE = 32,
63 ENABLE_QUICK_EDIT_MODE = 64,
64 ENABLE_EXTENDED_FLAGS = 128,
65 ENABLE_AUTO_POSITION = 256,
66 ENABLE_VIRTUAL_TERMINAL_INPUT = 512
67 }
68
69 enum {
70 ENABLE_PROCESSED_OUTPUT = 1,
71 ENABLE_WRAP_AT_EOL_OUTPUT = 2,
72 ENABLE_VIRTUAL_TERMINAL_PROCESSING = 4,
73 DISABLE_NEWLINE_AUTO_RETURN = 8,
74 ENABLE_LVB_GRID_WORLDWIDE = 16
75 }
76
77 enum {
78 KEY_EVENT = 1,
79 MOUSE_EVENT = 2,
80 WINDOW_BUFFER_SIZE_EVENT = 4,
81 MENU_EVENT = 8,
82 FOCUS_EVENT = 16
83 }
84 enum {
85 RIGHT_ALT_PRESSED = 1,
86 LEFT_ALT_PRESSED = 2,
87 RIGHT_CTRL_PRESSED = 4,
88 LEFT_CTRL_PRESSED = 8,
89 SHIFT_PRESSED = 16,
90 NUMLOCK_ON = 32,
91 SCROLLLOCK_ON = 64,
92 CAPSLOCK_ON = 128,
93 ENHANCED_KEY = 256
94 }
95 enum {
96 FROM_LEFT_1ST_BUTTON_PRESSED = 1,
97 RIGHTMOST_BUTTON_PRESSED = 2,
98 FROM_LEFT_2ND_BUTTON_PRESSED = 4,
99 FROM_LEFT_3RD_BUTTON_PRESSED = 8,
100 FROM_LEFT_4TH_BUTTON_PRESSED = 16
101 }
102
103 enum {
104 MOUSE_MOVED = 1,
105 DOUBLE_CLICK = 2,
106 MOUSE_WHEELED = 4
107 }
108
109 struct CHAR_INFO {
110 union _Char {
111 WCHAR UnicodeChar = 0;
112 CHAR AsciiChar;
113 }
114 union {
115 _Char Char;
116 WCHAR UnicodeChar;
117 CHAR AsciiChar;
118 }
119 WORD Attributes;
120 }
121 alias CHAR_INFO* PCHAR_INFO;
122
123 struct SMALL_RECT {
124 SHORT Left;
125 SHORT Top;
126 SHORT Right;
127 SHORT Bottom;
128 }
129 alias SMALL_RECT* PSMALL_RECT;
130
131 struct CONSOLE_CURSOR_INFO {
132 DWORD dwSize;
133 BOOL bVisible;
134 }
135 alias CONSOLE_CURSOR_INFO* PCONSOLE_CURSOR_INFO;
136
137 struct COORD {
138 SHORT X;
139 SHORT Y;
140 }
141 alias COORD* PCOORD;
142
143 struct CONSOLE_FONT_INFO {
144 DWORD nFont;
145 COORD dwFontSize;
146 }
147 alias CONSOLE_FONT_INFO* PCONSOLE_FONT_INFO;
148
149 struct CONSOLE_SCREEN_BUFFER_INFO {
150 COORD dwSize;
151 COORD dwCursorPosition;
152 WORD wAttributes;
153 SMALL_RECT srWindow;
154 COORD dwMaximumWindowSize;
155 }
156 alias CONSOLE_SCREEN_BUFFER_INFO* PCONSOLE_SCREEN_BUFFER_INFO;
157
158 alias extern(Windows) BOOL function(DWORD) nothrow PHANDLER_ROUTINE;
159
160 struct KEY_EVENT_RECORD {
161 BOOL bKeyDown;
162 WORD wRepeatCount;
163 WORD wVirtualKeyCode;
164 WORD wVirtualScanCode;
165 union _uChar {
166 WCHAR UnicodeChar = 0;
167 CHAR AsciiChar;
168 }
169 union {
170 WCHAR UnicodeChar = 0;
171 CHAR AsciiChar;
172 _uChar uChar;
173 }
174 DWORD dwControlKeyState;
175 }
176 alias KEY_EVENT_RECORD* PKEY_EVENT_RECORD;
177
178 struct MOUSE_EVENT_RECORD {
179 COORD dwMousePosition;
180 DWORD dwButtonState;
181 DWORD dwControlKeyState;
182 DWORD dwEventFlags;
183 }
184 alias MOUSE_EVENT_RECORD* PMOUSE_EVENT_RECORD;
185
186 struct WINDOW_BUFFER_SIZE_RECORD {
187 COORD dwSize;
188 }
189 alias WINDOW_BUFFER_SIZE_RECORD* PWINDOW_BUFFER_SIZE_RECORD;
190
191 struct MENU_EVENT_RECORD {
192 UINT dwCommandId;
193 }
194 alias MENU_EVENT_RECORD* PMENU_EVENT_RECORD;
195
196 struct FOCUS_EVENT_RECORD {
197 BOOL bSetFocus;
198 }
199 alias FOCUS_EVENT_RECORD* PFOCUS_EVENT_RECORD;
200
201 struct INPUT_RECORD {
202 WORD EventType;
203 union _Event {
204 KEY_EVENT_RECORD KeyEvent;
205 MOUSE_EVENT_RECORD MouseEvent;
206 WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent;
207 MENU_EVENT_RECORD MenuEvent;
208 FOCUS_EVENT_RECORD FocusEvent;
209 }
210 union {
211 KEY_EVENT_RECORD KeyEvent;
212 MOUSE_EVENT_RECORD MouseEvent;
213 WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent;
214 MENU_EVENT_RECORD MenuEvent;
215 FOCUS_EVENT_RECORD FocusEvent;
216 _Event Event;
217 }
218 }
219 alias INPUT_RECORD* PINPUT_RECORD;
220
221 extern (Windows) nothrow @nogc:
222
223 BOOL AllocConsole();
224 HANDLE CreateConsoleScreenBuffer(DWORD, DWORD, const(SECURITY_ATTRIBUTES)*, DWORD, LPVOID);
225 BOOL FillConsoleOutputAttribute(HANDLE, WORD, DWORD, COORD, PDWORD);
226 BOOL FillConsoleOutputCharacterA(HANDLE, CHAR, DWORD, COORD, PDWORD);
227 BOOL FillConsoleOutputCharacterW(HANDLE, WCHAR, DWORD, COORD, PDWORD);
228 BOOL FlushConsoleInputBuffer(HANDLE);
229 BOOL FreeConsole();
230 BOOL GenerateConsoleCtrlEvent(DWORD, DWORD);
231 UINT GetConsoleCP();
232 BOOL GetConsoleCursorInfo(HANDLE, PCONSOLE_CURSOR_INFO);
233 BOOL GetConsoleMode(HANDLE,PDWORD);
234 UINT GetConsoleOutputCP();
235 BOOL GetConsoleScreenBufferInfo(HANDLE, PCONSOLE_SCREEN_BUFFER_INFO);
236 DWORD GetConsoleTitleA(LPSTR, DWORD);
237 DWORD GetConsoleTitleW(LPWSTR, DWORD);
238 COORD GetLargestConsoleWindowSize(HANDLE);
239 BOOL GetNumberOfConsoleInputEvents(HANDLE, PDWORD);
240 BOOL GetNumberOfConsoleMouseButtons(PDWORD);
241 BOOL PeekConsoleInputA(HANDLE, PINPUT_RECORD, DWORD, PDWORD);
242 BOOL PeekConsoleInputW(HANDLE, PINPUT_RECORD, DWORD, PDWORD);
243 BOOL ReadConsoleA(HANDLE, PVOID, DWORD, PDWORD, PVOID);
244 BOOL ReadConsoleW(HANDLE, PVOID, DWORD, PDWORD, PVOID);
245 BOOL ReadConsoleInputA(HANDLE, PINPUT_RECORD, DWORD, PDWORD);
246 BOOL ReadConsoleInputW(HANDLE, PINPUT_RECORD, DWORD, PDWORD);
247 BOOL ReadConsoleOutputAttribute(HANDLE, LPWORD, DWORD, COORD, LPDWORD);
248 BOOL ReadConsoleOutputCharacterA(HANDLE, LPSTR, DWORD, COORD, PDWORD);
249 BOOL ReadConsoleOutputCharacterW(HANDLE, LPWSTR, DWORD, COORD, PDWORD);
250 BOOL ReadConsoleOutputA(HANDLE, PCHAR_INFO, COORD, COORD, PSMALL_RECT);
251 BOOL ReadConsoleOutputW(HANDLE, PCHAR_INFO, COORD, COORD, PSMALL_RECT);
252 BOOL ScrollConsoleScreenBufferA(HANDLE, const(SMALL_RECT)*, const(SMALL_RECT)*, COORD, const(CHAR_INFO)*);
253 BOOL ScrollConsoleScreenBufferW(HANDLE, const(SMALL_RECT)*, const(SMALL_RECT)*, COORD, const(CHAR_INFO)*);
254 BOOL SetConsoleActiveScreenBuffer(HANDLE);
255 BOOL SetConsoleCP(UINT);
256 BOOL SetConsoleCtrlHandler(PHANDLER_ROUTINE, BOOL);
257 BOOL SetConsoleCursorInfo(HANDLE, const(CONSOLE_CURSOR_INFO)*);
258 BOOL SetConsoleCursorPosition(HANDLE, COORD);
259
260
261 static if (_WIN32_WINNT >= 0x500) {
262 BOOL GetConsoleDisplayMode(LPDWORD);
263 HWND GetConsoleWindow();
264 }
265
266 static if (_WIN32_WINNT >= 0x501) {
267 BOOL AttachConsole(DWORD);
268 BOOL SetConsoleDisplayMode(HANDLE, DWORD, PCOORD);
269 enum DWORD ATTACH_PARENT_PROCESS = cast(DWORD)-1;
270 }
271
272 BOOL SetConsoleMode(HANDLE, DWORD);
273 BOOL SetConsoleOutputCP(UINT);
274 BOOL SetConsoleScreenBufferSize(HANDLE, COORD);
275 BOOL SetConsoleTextAttribute(HANDLE, WORD);
276 BOOL SetConsoleTitleA(LPCSTR);
277 BOOL SetConsoleTitleW(LPCWSTR);
278 BOOL SetConsoleWindowInfo(HANDLE, BOOL, const(SMALL_RECT)*);
279 BOOL WriteConsoleA(HANDLE, PCVOID, DWORD, PDWORD, PVOID);
280 BOOL WriteConsoleW(HANDLE, PCVOID, DWORD, PDWORD, PVOID);
281 BOOL WriteConsoleInputA(HANDLE, const(INPUT_RECORD)*, DWORD, PDWORD);
282 BOOL WriteConsoleInputW(HANDLE, const(INPUT_RECORD)*, DWORD, PDWORD);
283 BOOL WriteConsoleOutputA(HANDLE, const(CHAR_INFO)*, COORD, COORD, PSMALL_RECT);
284 BOOL WriteConsoleOutputW(HANDLE, const(CHAR_INFO)*, COORD, COORD, PSMALL_RECT);
285 BOOL WriteConsoleOutputAttribute(HANDLE, const(WORD)*, DWORD, COORD, PDWORD);
286 BOOL WriteConsoleOutputCharacterA(HANDLE, LPCSTR, DWORD, COORD, PDWORD);
287 BOOL WriteConsoleOutputCharacterW(HANDLE, LPCWSTR, DWORD, COORD, PDWORD);
288
289 version (Unicode) {
290 alias FillConsoleOutputCharacterW FillConsoleOutputCharacter;
291 alias GetConsoleTitleW GetConsoleTitle;
292 alias PeekConsoleInputW PeekConsoleInput;
293 alias ReadConsoleW ReadConsole;
294 alias ReadConsoleInputW ReadConsoleInput;
295 alias ReadConsoleOutputW ReadConsoleOutput;
296 alias ReadConsoleOutputCharacterW ReadConsoleOutputCharacter;
297 alias ScrollConsoleScreenBufferW ScrollConsoleScreenBuffer;
298 alias SetConsoleTitleW SetConsoleTitle;
299 alias WriteConsoleW WriteConsole;
300 alias WriteConsoleInputW WriteConsoleInput;
301 alias WriteConsoleOutputW WriteConsoleOutput;
302 alias WriteConsoleOutputCharacterW WriteConsoleOutputCharacter;
303 } else {
304 alias FillConsoleOutputCharacterA FillConsoleOutputCharacter;
305 alias GetConsoleTitleA GetConsoleTitle;
306 alias PeekConsoleInputA PeekConsoleInput;
307 alias ReadConsoleA ReadConsole;
308 alias ReadConsoleInputA ReadConsoleInput;
309 alias ReadConsoleOutputA ReadConsoleOutput;
310 alias ReadConsoleOutputCharacterA ReadConsoleOutputCharacter;
311 alias ScrollConsoleScreenBufferA ScrollConsoleScreenBuffer;
312 alias SetConsoleTitleA SetConsoleTitle;
313 alias WriteConsoleA WriteConsole;
314 alias WriteConsoleInputA WriteConsoleInput;
315 alias WriteConsoleOutputA WriteConsoleOutput;
316 alias WriteConsoleOutputCharacterA WriteConsoleOutputCharacter;
317 }
318