1 // Licensed under the Apache License, Version 2.0
2 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
3 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4 // All files in the project carrying such notice may not be copied, modified, or distributed
5 // except according to those terms.
6 //! This module contains the public data structures, data types, and procedures exported by the NT
7 //! console subsystem.
8 use ctypes::c_void;
9 use shared::minwindef::{BOOL, DWORD, LPDWORD, LPVOID, LPWORD, UINT, ULONG, WORD};
10 use shared::windef::{COLORREF, HWND};
11 use um::minwinbase::SECURITY_ATTRIBUTES;
12 use um::wingdi::LF_FACESIZE;
13 use um::winnt::{CHAR, HANDLE, LPCSTR, LPCWSTR, LPSTR, LPWSTR, WCHAR};
14 // Many definitions in wincontypes used to be defined in this file, so reexport them to avoid
15 // breakage. For clarity they are imported in the order they are defined in that file rather
16 // than winapi's usual alphabetical ordering, with some newlines and indentation to match their
17 // grouping in the file.
18 pub use um::wincontypes::{
19     COORD, PCOORD,
20     SMALL_RECT, PSMALL_RECT,
21     KEY_EVENT_RECORD_uChar, KEY_EVENT_RECORD, PKEY_EVENT_RECORD,
22     RIGHT_ALT_PRESSED, LEFT_ALT_PRESSED, RIGHT_CTRL_PRESSED, LEFT_CTRL_PRESSED, SHIFT_PRESSED,
23         NUMLOCK_ON, SCROLLLOCK_ON, CAPSLOCK_ON, ENHANCED_KEY, NLS_DBCSCHAR, NLS_ALPHANUMERIC,
24         NLS_KATAKANA, NLS_HIRAGANA, NLS_ROMAN, NLS_IME_CONVERSION, NLS_IME_DISABLE,
25     MOUSE_EVENT_RECORD, PMOUSE_EVENT_RECORD,
26     FROM_LEFT_1ST_BUTTON_PRESSED, RIGHTMOST_BUTTON_PRESSED, FROM_LEFT_2ND_BUTTON_PRESSED,
27         FROM_LEFT_3RD_BUTTON_PRESSED, FROM_LEFT_4TH_BUTTON_PRESSED, MOUSE_MOVED, DOUBLE_CLICK,
28         MOUSE_WHEELED, MOUSE_HWHEELED,
29     WINDOW_BUFFER_SIZE_RECORD, PWINDOW_BUFFER_SIZE_RECORD,
30     MENU_EVENT_RECORD, PMENU_EVENT_RECORD,
31     FOCUS_EVENT_RECORD, PFOCUS_EVENT_RECORD,
32     INPUT_RECORD_Event, INPUT_RECORD, PINPUT_RECORD,
33     KEY_EVENT, MOUSE_EVENT, WINDOW_BUFFER_SIZE_EVENT, MENU_EVENT, FOCUS_EVENT,
34     CHAR_INFO_Char, CHAR_INFO, PCHAR_INFO,
35     CONSOLE_FONT_INFO, PCONSOLE_FONT_INFO
36 };
37 pub const FOREGROUND_BLUE: WORD = 0x0001;
38 pub const FOREGROUND_GREEN: WORD = 0x0002;
39 pub const FOREGROUND_RED: WORD = 0x0004;
40 pub const FOREGROUND_INTENSITY: WORD = 0x0008;
41 pub const BACKGROUND_BLUE: WORD = 0x0010;
42 pub const BACKGROUND_GREEN: WORD = 0x0020;
43 pub const BACKGROUND_RED: WORD = 0x0040;
44 pub const BACKGROUND_INTENSITY: WORD = 0x0080;
45 pub const COMMON_LVB_LEADING_BYTE: WORD = 0x0100;
46 pub const COMMON_LVB_TRAILING_BYTE: WORD = 0x0200;
47 pub const COMMON_LVB_GRID_HORIZONTAL: WORD = 0x0400;
48 pub const COMMON_LVB_GRID_LVERTICAL: WORD = 0x0800;
49 pub const COMMON_LVB_GRID_RVERTICAL: WORD = 0x1000;
50 pub const COMMON_LVB_REVERSE_VIDEO: WORD = 0x4000;
51 pub const COMMON_LVB_UNDERSCORE: WORD = 0x8000;
52 pub const COMMON_LVB_SBCSDBCS: WORD = 0x0300;
53 STRUCT!{struct CONSOLE_SCREEN_BUFFER_INFO {
54     dwSize: COORD,
55     dwCursorPosition: COORD,
56     wAttributes: WORD,
57     srWindow: SMALL_RECT,
58     dwMaximumWindowSize: COORD,
59 }}
60 pub type PCONSOLE_SCREEN_BUFFER_INFO = *mut CONSOLE_SCREEN_BUFFER_INFO;
61 STRUCT!{struct CONSOLE_SCREEN_BUFFER_INFOEX {
62     cbSize: ULONG,
63     dwSize: COORD,
64     dwCursorPosition: COORD,
65     wAttributes: WORD,
66     srWindow: SMALL_RECT,
67     dwMaximumWindowSize: COORD,
68     wPopupAttributes: WORD,
69     bFullscreenSupported: BOOL,
70     ColorTable: [COLORREF; 16],
71 }}
72 pub type PCONSOLE_SCREEN_BUFFER_INFOEX = *mut CONSOLE_SCREEN_BUFFER_INFOEX;
73 STRUCT!{struct CONSOLE_CURSOR_INFO {
74     dwSize: DWORD,
75     bVisible: BOOL,
76 }}
77 pub type PCONSOLE_CURSOR_INFO = *mut CONSOLE_CURSOR_INFO;
78 STRUCT!{struct CONSOLE_FONT_INFOEX {
79     cbSize: ULONG,
80     nFont: DWORD,
81     dwFontSize: COORD,
82     FontFamily: UINT,
83     FontWeight: UINT,
84     FaceName: [WCHAR; LF_FACESIZE],
85 }}
86 pub type PCONSOLE_FONT_INFOEX = *mut CONSOLE_FONT_INFOEX;
87 pub const HISTORY_NO_DUP_FLAG: DWORD = 0x1;
88 STRUCT!{struct CONSOLE_HISTORY_INFO {
89     cbSize: UINT,
90     HistoryBufferSize: UINT,
91     NumberOfHistoryBuffers: UINT,
92     dwFlags: DWORD,
93 }}
94 pub type PCONSOLE_HISTORY_INFO = *mut CONSOLE_HISTORY_INFO;
95 STRUCT!{struct CONSOLE_SELECTION_INFO {
96     dwFlags: DWORD,
97     dwSelectionAnchor: COORD,
98     srSelection: SMALL_RECT,
99 }}
100 pub type PCONSOLE_SELECTION_INFO = *mut CONSOLE_SELECTION_INFO;
101 pub const CONSOLE_NO_SELECTION: DWORD = 0x0000;
102 pub const CONSOLE_SELECTION_IN_PROGRESS: DWORD = 0x0001;
103 pub const CONSOLE_SELECTION_NOT_EMPTY: DWORD = 0x0002;
104 pub const CONSOLE_MOUSE_SELECTION: DWORD = 0x0004;
105 pub const CONSOLE_MOUSE_DOWN: DWORD = 0x0008;
106 FN!{stdcall PHANDLER_ROUTINE(
107     CtrlType: DWORD,
108 ) -> BOOL}
109 pub const CTRL_C_EVENT: DWORD = 0;
110 pub const CTRL_BREAK_EVENT: DWORD = 1;
111 pub const CTRL_CLOSE_EVENT: DWORD = 2;
112 pub const CTRL_LOGOFF_EVENT: DWORD = 5;
113 pub const CTRL_SHUTDOWN_EVENT: DWORD = 6;
114 pub const ENABLE_PROCESSED_INPUT: DWORD = 0x0001;
115 pub const ENABLE_LINE_INPUT: DWORD = 0x0002;
116 pub const ENABLE_ECHO_INPUT: DWORD = 0x0004;
117 pub const ENABLE_WINDOW_INPUT: DWORD = 0x0008;
118 pub const ENABLE_MOUSE_INPUT: DWORD = 0x0010;
119 pub const ENABLE_INSERT_MODE: DWORD = 0x0020;
120 pub const ENABLE_QUICK_EDIT_MODE: DWORD = 0x0040;
121 pub const ENABLE_EXTENDED_FLAGS: DWORD = 0x0080;
122 pub const ENABLE_AUTO_POSITION: DWORD = 0x0100;
123 pub const ENABLE_VIRTUAL_TERMINAL_INPUT: DWORD = 0x0200;
124 pub const ENABLE_PROCESSED_OUTPUT: DWORD = 0x0001;
125 pub const ENABLE_WRAP_AT_EOL_OUTPUT: DWORD = 0x0002;
126 pub const ENABLE_VIRTUAL_TERMINAL_PROCESSING: DWORD = 0x0004;
127 pub const DISABLE_NEWLINE_AUTO_RETURN: DWORD = 0x0008;
128 pub const ENABLE_LVB_GRID_WORLDWIDE: DWORD = 0x0010;
129 extern "system" {
PeekConsoleInputW( hConsoleInput: HANDLE, lpBuffer: PINPUT_RECORD, nLength: DWORD, lpNumberOfEventsRead: LPDWORD, ) -> BOOL130     pub fn PeekConsoleInputW(
131         hConsoleInput: HANDLE,
132         lpBuffer: PINPUT_RECORD,
133         nLength: DWORD,
134         lpNumberOfEventsRead: LPDWORD,
135     ) -> BOOL;
WriteConsoleInputA( hConsoleInput: HANDLE, lpBuffer: *const INPUT_RECORD, nLength: DWORD, lpNumberOfEventsWritten: LPDWORD, ) -> BOOL136     pub fn WriteConsoleInputA(
137         hConsoleInput: HANDLE,
138         lpBuffer: *const INPUT_RECORD,
139         nLength: DWORD,
140         lpNumberOfEventsWritten: LPDWORD,
141     ) -> BOOL;
WriteConsoleInputW( hConsoleInput: HANDLE, lpBuffer: *const INPUT_RECORD, nLength: DWORD, lpNumberOfEventsWritten: LPDWORD, ) -> BOOL142     pub fn WriteConsoleInputW(
143         hConsoleInput: HANDLE,
144         lpBuffer: *const INPUT_RECORD,
145         nLength: DWORD,
146         lpNumberOfEventsWritten: LPDWORD,
147     ) -> BOOL;
ReadConsoleOutputA( hConsoleOutput: HANDLE, lpBuffer: PCHAR_INFO, dwBufferSize: COORD, dwBufferCoord: COORD, lpReadRegion: PSMALL_RECT, ) -> BOOL148     pub fn ReadConsoleOutputA(
149         hConsoleOutput: HANDLE,
150         lpBuffer: PCHAR_INFO,
151         dwBufferSize: COORD,
152         dwBufferCoord: COORD,
153         lpReadRegion: PSMALL_RECT,
154     ) -> BOOL;
ReadConsoleOutputW( hConsoleOutput: HANDLE, lpBuffer: PCHAR_INFO, dwBufferSize: COORD, dwBufferCoord: COORD, lpReadRegion: PSMALL_RECT, ) -> BOOL155     pub fn ReadConsoleOutputW(
156         hConsoleOutput: HANDLE,
157         lpBuffer: PCHAR_INFO,
158         dwBufferSize: COORD,
159         dwBufferCoord: COORD,
160         lpReadRegion: PSMALL_RECT,
161     ) -> BOOL;
WriteConsoleOutputA( hConsoleOutput: HANDLE, lpBuffer: *const CHAR_INFO, dwBufferSize: COORD, dwBufferCoord: COORD, lpWriteRegion: PSMALL_RECT, ) -> BOOL162     pub fn WriteConsoleOutputA(
163         hConsoleOutput: HANDLE,
164         lpBuffer: *const CHAR_INFO,
165         dwBufferSize: COORD,
166         dwBufferCoord: COORD,
167         lpWriteRegion: PSMALL_RECT,
168     ) -> BOOL;
WriteConsoleOutputW( hConsoleOutput: HANDLE, lpBuffer: *const CHAR_INFO, dwBufferSize: COORD, dwBufferCoord: COORD, lpWriteRegion: PSMALL_RECT, ) -> BOOL169     pub fn WriteConsoleOutputW(
170         hConsoleOutput: HANDLE,
171         lpBuffer: *const CHAR_INFO,
172         dwBufferSize: COORD,
173         dwBufferCoord: COORD,
174         lpWriteRegion: PSMALL_RECT,
175     ) -> BOOL;
ReadConsoleOutputCharacterA( hConsoleOutput: HANDLE, lpCharacter: LPSTR, nLength: DWORD, dwReadCoord: COORD, lpNumberOfCharsRead: LPDWORD, ) -> BOOL176     pub fn ReadConsoleOutputCharacterA(
177         hConsoleOutput: HANDLE,
178         lpCharacter: LPSTR,
179         nLength: DWORD,
180         dwReadCoord: COORD,
181         lpNumberOfCharsRead: LPDWORD,
182     ) -> BOOL;
ReadConsoleOutputCharacterW( hConsoleOutput: HANDLE, lpCharacter: LPWSTR, nLength: DWORD, dwReadCoord: COORD, lpNumberOfCharsRead: LPDWORD, ) -> BOOL183     pub fn ReadConsoleOutputCharacterW(
184         hConsoleOutput: HANDLE,
185         lpCharacter: LPWSTR,
186         nLength: DWORD,
187         dwReadCoord: COORD,
188         lpNumberOfCharsRead: LPDWORD,
189     ) -> BOOL;
ReadConsoleOutputAttribute( hConsoleOutput: HANDLE, lpAttribute: LPWORD, nLength: DWORD, dwReadCoord: COORD, lpNumberOfAttrsRead: LPDWORD, ) -> BOOL190     pub fn ReadConsoleOutputAttribute(
191         hConsoleOutput: HANDLE,
192         lpAttribute: LPWORD,
193         nLength: DWORD,
194         dwReadCoord: COORD,
195         lpNumberOfAttrsRead: LPDWORD,
196     ) -> BOOL;
WriteConsoleOutputCharacterA( hConsoleOutput: HANDLE, lpCharacter: LPCSTR, nLength: DWORD, dwWriteCoord: COORD, lpNumberOfCharsWritten: LPDWORD, ) -> BOOL197     pub fn WriteConsoleOutputCharacterA(
198         hConsoleOutput: HANDLE,
199         lpCharacter: LPCSTR,
200         nLength: DWORD,
201         dwWriteCoord: COORD,
202         lpNumberOfCharsWritten: LPDWORD,
203     ) -> BOOL;
WriteConsoleOutputCharacterW( hConsoleOutput: HANDLE, lpCharacter: LPCWSTR, nLength: DWORD, dwWriteCoord: COORD, lpNumberOfCharsWritten: LPDWORD, ) -> BOOL204     pub fn WriteConsoleOutputCharacterW(
205         hConsoleOutput: HANDLE,
206         lpCharacter: LPCWSTR,
207         nLength: DWORD,
208         dwWriteCoord: COORD,
209         lpNumberOfCharsWritten: LPDWORD,
210     ) -> BOOL;
WriteConsoleOutputAttribute( hConsoleOutput: HANDLE, lpAttribute: *const WORD, nLength: DWORD, dwWriteCoord: COORD, lpNumberOfAttrsWritten: LPDWORD, ) -> BOOL211     pub fn WriteConsoleOutputAttribute(
212         hConsoleOutput: HANDLE,
213         lpAttribute: *const WORD,
214         nLength: DWORD,
215         dwWriteCoord: COORD,
216         lpNumberOfAttrsWritten: LPDWORD,
217     ) -> BOOL;
FillConsoleOutputCharacterA( hConsoleOutput: HANDLE, cCharacter: CHAR, nLength: DWORD, dwWriteCoord: COORD, lpNumberOfCharsWritten: LPDWORD, ) -> BOOL218     pub fn FillConsoleOutputCharacterA(
219         hConsoleOutput: HANDLE,
220         cCharacter: CHAR,
221         nLength: DWORD,
222         dwWriteCoord: COORD,
223         lpNumberOfCharsWritten: LPDWORD,
224     ) -> BOOL;
FillConsoleOutputCharacterW( hConsoleOutput: HANDLE, cCharacter: WCHAR, nLength: DWORD, dwWriteCoord: COORD, lpNumberOfCharsWritten: LPDWORD, ) -> BOOL225     pub fn FillConsoleOutputCharacterW(
226         hConsoleOutput: HANDLE,
227         cCharacter: WCHAR,
228         nLength: DWORD,
229         dwWriteCoord: COORD,
230         lpNumberOfCharsWritten: LPDWORD,
231     ) -> BOOL;
FillConsoleOutputAttribute( hConsoleOutput: HANDLE, wAttribute: WORD, nLength: DWORD, dwWriteCoord: COORD, lpNumberOfAttrsWritten: LPDWORD, ) -> BOOL232     pub fn FillConsoleOutputAttribute(
233         hConsoleOutput: HANDLE,
234         wAttribute: WORD,
235         nLength: DWORD,
236         dwWriteCoord: COORD,
237         lpNumberOfAttrsWritten: LPDWORD,
238     ) -> BOOL;
239 }
240 pub const CONSOLE_REAL_OUTPUT_HANDLE: *mut c_void = -2isize as *mut c_void;
241 pub const CONSOLE_REAL_INPUT_HANDLE: *mut c_void = -3isize as *mut c_void;
242 extern "system" {
GetConsoleScreenBufferInfo( hConsoleOutput: HANDLE, lpConsoleScreenBufferInfo: PCONSOLE_SCREEN_BUFFER_INFO, ) -> BOOL243     pub fn GetConsoleScreenBufferInfo(
244         hConsoleOutput: HANDLE,
245         lpConsoleScreenBufferInfo: PCONSOLE_SCREEN_BUFFER_INFO,
246     ) -> BOOL;
GetConsoleScreenBufferInfoEx( hConsoleOutput: HANDLE, lpConsoleScreenBufferInfoEx: PCONSOLE_SCREEN_BUFFER_INFOEX, ) -> BOOL247     pub fn GetConsoleScreenBufferInfoEx(
248         hConsoleOutput: HANDLE,
249         lpConsoleScreenBufferInfoEx: PCONSOLE_SCREEN_BUFFER_INFOEX,
250     ) -> BOOL;
SetConsoleScreenBufferInfoEx( hConsoleOutput: HANDLE, lpConsoleScreenBufferInfoEx: PCONSOLE_SCREEN_BUFFER_INFOEX, ) -> BOOL251     pub fn SetConsoleScreenBufferInfoEx(
252         hConsoleOutput: HANDLE,
253         lpConsoleScreenBufferInfoEx: PCONSOLE_SCREEN_BUFFER_INFOEX,
254     ) -> BOOL;
GetLargestConsoleWindowSize( hConsoleOutput: HANDLE, ) -> COORD255     pub fn GetLargestConsoleWindowSize(
256         hConsoleOutput: HANDLE,
257     ) -> COORD;
GetConsoleCursorInfo( hConsoleOutput: HANDLE, lpConsoleCursorInfo: PCONSOLE_CURSOR_INFO, ) -> BOOL258     pub fn GetConsoleCursorInfo(
259         hConsoleOutput: HANDLE,
260         lpConsoleCursorInfo: PCONSOLE_CURSOR_INFO,
261     ) -> BOOL;
GetCurrentConsoleFont( hConsoleOutput: HANDLE, bMaximumWindow: BOOL, lpConsoleCurrentFont: PCONSOLE_FONT_INFO, ) -> BOOL262     pub fn GetCurrentConsoleFont(
263         hConsoleOutput: HANDLE,
264         bMaximumWindow: BOOL,
265         lpConsoleCurrentFont: PCONSOLE_FONT_INFO,
266     ) -> BOOL;
GetCurrentConsoleFontEx( hConsoleOutput: HANDLE, bMaximumWindow: BOOL, lpConsoleCurrentFontEx: PCONSOLE_FONT_INFOEX, ) -> BOOL267     pub fn GetCurrentConsoleFontEx(
268         hConsoleOutput: HANDLE,
269         bMaximumWindow: BOOL,
270         lpConsoleCurrentFontEx: PCONSOLE_FONT_INFOEX,
271     ) -> BOOL;
SetCurrentConsoleFontEx( hConsoleOutput: HANDLE, bMaximumWindow: BOOL, lpConsoleCurrentFontEx: PCONSOLE_FONT_INFOEX, ) -> BOOL272     pub fn SetCurrentConsoleFontEx(
273         hConsoleOutput: HANDLE,
274         bMaximumWindow: BOOL,
275         lpConsoleCurrentFontEx: PCONSOLE_FONT_INFOEX,
276     ) -> BOOL;
GetConsoleHistoryInfo( lpConsoleHistoryInfo: PCONSOLE_HISTORY_INFO, ) -> BOOL277     pub fn GetConsoleHistoryInfo(
278         lpConsoleHistoryInfo: PCONSOLE_HISTORY_INFO,
279     ) -> BOOL;
SetConsoleHistoryInfo( lpConsoleHistoryInfo: PCONSOLE_HISTORY_INFO, ) -> BOOL280     pub fn SetConsoleHistoryInfo(
281         lpConsoleHistoryInfo: PCONSOLE_HISTORY_INFO,
282     ) -> BOOL;
GetConsoleFontSize( hConsoleOutput: HANDLE, nFont: DWORD, ) -> COORD283     pub fn GetConsoleFontSize(
284         hConsoleOutput: HANDLE,
285         nFont: DWORD,
286     ) -> COORD;
GetConsoleSelectionInfo( lpConsoleSelectionInfo: PCONSOLE_SELECTION_INFO, ) -> BOOL287     pub fn GetConsoleSelectionInfo(
288         lpConsoleSelectionInfo: PCONSOLE_SELECTION_INFO,
289     ) -> BOOL;
GetNumberOfConsoleMouseButtons( lpNumberOfMouseButtons: LPDWORD, ) -> BOOL290     pub fn GetNumberOfConsoleMouseButtons(
291         lpNumberOfMouseButtons: LPDWORD,
292     ) -> BOOL;
SetConsoleActiveScreenBuffer( hConsoleOutput: HANDLE, ) -> BOOL293     pub fn SetConsoleActiveScreenBuffer(
294         hConsoleOutput: HANDLE,
295     ) -> BOOL;
FlushConsoleInputBuffer( hConsoleInput: HANDLE, ) -> BOOL296     pub fn FlushConsoleInputBuffer(
297         hConsoleInput: HANDLE,
298     ) -> BOOL;
SetConsoleScreenBufferSize( hConsoleOutput: HANDLE, dwSize: COORD, ) -> BOOL299     pub fn SetConsoleScreenBufferSize(
300         hConsoleOutput: HANDLE,
301         dwSize: COORD,
302     ) -> BOOL;
SetConsoleCursorPosition( hConsoleOutput: HANDLE, dwCursorPosition: COORD, ) -> BOOL303     pub fn SetConsoleCursorPosition(
304         hConsoleOutput: HANDLE,
305         dwCursorPosition: COORD,
306     ) -> BOOL;
SetConsoleCursorInfo( hConsoleOutput: HANDLE, lpConsoleCursorInfo: *const CONSOLE_CURSOR_INFO, ) -> BOOL307     pub fn SetConsoleCursorInfo(
308         hConsoleOutput: HANDLE,
309         lpConsoleCursorInfo: *const CONSOLE_CURSOR_INFO,
310     ) -> BOOL;
ScrollConsoleScreenBufferA( hConsoleOutput: HANDLE, lpScrollRectangle: *const SMALL_RECT, lpClipRectangle: *const SMALL_RECT, dwDestinationOrigin: COORD, lpFill: *const CHAR_INFO, ) -> BOOL311     pub fn ScrollConsoleScreenBufferA(
312         hConsoleOutput: HANDLE,
313         lpScrollRectangle: *const SMALL_RECT,
314         lpClipRectangle: *const SMALL_RECT,
315         dwDestinationOrigin: COORD,
316         lpFill: *const CHAR_INFO,
317     ) -> BOOL;
ScrollConsoleScreenBufferW( hConsoleOutput: HANDLE, lpScrollRectangle: *const SMALL_RECT, lpClipRectangle: *const SMALL_RECT, dwDestinationOrigin: COORD, lpFill: *const CHAR_INFO, ) -> BOOL318     pub fn ScrollConsoleScreenBufferW(
319         hConsoleOutput: HANDLE,
320         lpScrollRectangle: *const SMALL_RECT,
321         lpClipRectangle: *const SMALL_RECT,
322         dwDestinationOrigin: COORD,
323         lpFill: *const CHAR_INFO,
324     ) -> BOOL;
SetConsoleWindowInfo( hConsoleOutput: HANDLE, bAbsolute: BOOL, lpConsoleWindow: *const SMALL_RECT, ) -> BOOL325     pub fn SetConsoleWindowInfo(
326         hConsoleOutput: HANDLE,
327         bAbsolute: BOOL,
328         lpConsoleWindow: *const SMALL_RECT,
329     ) -> BOOL;
SetConsoleTextAttribute( hConsoleOutput: HANDLE, wAttributes: WORD, ) -> BOOL330     pub fn SetConsoleTextAttribute(
331         hConsoleOutput: HANDLE,
332         wAttributes: WORD,
333     ) -> BOOL;
GenerateConsoleCtrlEvent( dwCtrlEvent: DWORD, dwProcessGroupId: DWORD, ) -> BOOL334     pub fn GenerateConsoleCtrlEvent(
335         dwCtrlEvent: DWORD,
336         dwProcessGroupId: DWORD,
337     ) -> BOOL;
FreeConsole() -> BOOL338     pub fn FreeConsole() -> BOOL;
AttachConsole( dwProcessId: DWORD, ) -> BOOL339     pub fn AttachConsole(
340         dwProcessId: DWORD,
341     ) -> BOOL;
342 }
343 pub const ATTACH_PARENT_PROCESS: DWORD = 0xFFFFFFFF;
344 extern "system" {
GetConsoleTitleA( lpConsoleTitle: LPSTR, nSize: DWORD, ) -> DWORD345     pub fn GetConsoleTitleA(
346         lpConsoleTitle: LPSTR,
347         nSize: DWORD,
348     ) -> DWORD;
GetConsoleTitleW( lpConsoleTitle: LPWSTR, nSize: DWORD, ) -> DWORD349     pub fn GetConsoleTitleW(
350         lpConsoleTitle: LPWSTR,
351         nSize: DWORD,
352     ) -> DWORD;
GetConsoleOriginalTitleA( lpConsoleTitle: LPSTR, nSize: DWORD, ) -> DWORD353     pub fn GetConsoleOriginalTitleA(
354         lpConsoleTitle: LPSTR,
355         nSize: DWORD,
356     ) -> DWORD;
GetConsoleOriginalTitleW( lpConsoleTitle: LPWSTR, nSize: DWORD, ) -> DWORD357     pub fn GetConsoleOriginalTitleW(
358         lpConsoleTitle: LPWSTR,
359         nSize: DWORD,
360     ) -> DWORD;
SetConsoleTitleA( lpConsoleTitle: LPCSTR, ) -> BOOL361     pub fn SetConsoleTitleA(
362         lpConsoleTitle: LPCSTR,
363     ) -> BOOL;
SetConsoleTitleW( lpConsoleTitle: LPCWSTR, ) -> BOOL364     pub fn SetConsoleTitleW(
365         lpConsoleTitle: LPCWSTR,
366     ) -> BOOL;
367 }
368 STRUCT!{struct CONSOLE_READCONSOLE_CONTROL {
369     nLength: ULONG,
370     nInitialChars: ULONG,
371     dwCtrlWakeupMask: ULONG,
372     dwControlKeyState: ULONG,
373 }}
374 pub type PCONSOLE_READCONSOLE_CONTROL = *mut CONSOLE_READCONSOLE_CONTROL;
375 pub const CONSOLE_TEXTMODE_BUFFER: DWORD = 1;
376 extern "system" {
CreateConsoleScreenBuffer( dwDesiredAccess: DWORD, dwShareMode: DWORD, lpSecurityAttributes: *const SECURITY_ATTRIBUTES, dwFlags: DWORD, lpScreenBufferData: LPVOID, ) -> HANDLE377     pub fn CreateConsoleScreenBuffer(
378         dwDesiredAccess: DWORD,
379         dwShareMode: DWORD,
380         lpSecurityAttributes: *const SECURITY_ATTRIBUTES,
381         dwFlags: DWORD,
382         lpScreenBufferData: LPVOID,
383     ) -> HANDLE;
SetConsoleCP( wCodePageID: UINT, ) -> BOOL384     pub fn SetConsoleCP(
385         wCodePageID: UINT,
386     ) -> BOOL;
SetConsoleOutputCP( wCodePageID: UINT, ) -> BOOL387     pub fn SetConsoleOutputCP(
388         wCodePageID: UINT,
389     ) -> BOOL;
390 }
391 pub const CONSOLE_FULLSCREEN: DWORD = 1;
392 pub const CONSOLE_FULLSCREEN_HARDWARE: DWORD = 2;
393 extern "system" {
GetConsoleDisplayMode( lpModeFlags: LPDWORD, ) -> BOOL394     pub fn GetConsoleDisplayMode(
395         lpModeFlags: LPDWORD,
396     ) -> BOOL;
397 }
398 pub const CONSOLE_FULLSCREEN_MODE: DWORD = 1;
399 pub const CONSOLE_WINDOWED_MODE: DWORD = 2;
400 extern "system" {
SetConsoleDisplayMode( hConsoleOutput: HANDLE, dwFlags: DWORD, lpNewScreenBufferDimensions: PCOORD, ) -> BOOL401     pub fn SetConsoleDisplayMode(
402         hConsoleOutput: HANDLE,
403         dwFlags: DWORD,
404         lpNewScreenBufferDimensions: PCOORD,
405     ) -> BOOL;
GetConsoleWindow() -> HWND406     pub fn GetConsoleWindow() -> HWND;
GetConsoleProcessList( lpdwProcessList: LPDWORD, dwProcessCount: DWORD, ) -> DWORD407     pub fn GetConsoleProcessList(
408         lpdwProcessList: LPDWORD,
409         dwProcessCount: DWORD,
410     ) -> DWORD;
AddConsoleAliasA( Source: LPSTR, Target: LPSTR, ExeName: LPSTR, ) -> BOOL411     pub fn AddConsoleAliasA(
412         Source: LPSTR,
413         Target: LPSTR,
414         ExeName: LPSTR,
415     ) -> BOOL;
AddConsoleAliasW( Source: LPWSTR, Target: LPWSTR, ExeName: LPWSTR, ) -> BOOL416     pub fn AddConsoleAliasW(
417         Source: LPWSTR,
418         Target: LPWSTR,
419         ExeName: LPWSTR,
420     ) -> BOOL;
GetConsoleAliasA( Source: LPSTR, TargetBuffer: LPSTR, TargetBufferLength: DWORD, ExeName: LPSTR, ) -> DWORD421     pub fn GetConsoleAliasA(
422         Source: LPSTR,
423         TargetBuffer: LPSTR,
424         TargetBufferLength: DWORD,
425         ExeName: LPSTR,
426     ) -> DWORD;
GetConsoleAliasW( Source: LPWSTR, TargetBuffer: LPWSTR, TargetBufferLength: DWORD, ExeName: LPWSTR, ) -> DWORD427     pub fn GetConsoleAliasW(
428         Source: LPWSTR,
429         TargetBuffer: LPWSTR,
430         TargetBufferLength: DWORD,
431         ExeName: LPWSTR,
432     ) -> DWORD;
GetConsoleAliasesLengthA( ExeName: LPSTR, ) -> DWORD433     pub fn GetConsoleAliasesLengthA(
434         ExeName: LPSTR,
435     ) -> DWORD;
GetConsoleAliasesLengthW( ExeName: LPWSTR, ) -> DWORD436     pub fn GetConsoleAliasesLengthW(
437         ExeName: LPWSTR,
438     ) -> DWORD;
GetConsoleAliasExesLengthA() -> DWORD439     pub fn GetConsoleAliasExesLengthA() -> DWORD;
GetConsoleAliasExesLengthW() -> DWORD440     pub fn GetConsoleAliasExesLengthW() -> DWORD;
GetConsoleAliasesA( AliasBuffer: LPSTR, AliasBufferLength: DWORD, ExeName: LPSTR, ) -> DWORD441     pub fn GetConsoleAliasesA(
442         AliasBuffer: LPSTR,
443         AliasBufferLength: DWORD,
444         ExeName: LPSTR,
445     ) -> DWORD;
GetConsoleAliasesW( AliasBuffer: LPWSTR, AliasBufferLength: DWORD, ExeName: LPWSTR, ) -> DWORD446     pub fn GetConsoleAliasesW(
447         AliasBuffer: LPWSTR,
448         AliasBufferLength: DWORD,
449         ExeName: LPWSTR,
450     ) -> DWORD;
GetConsoleAliasExesA( ExeNameBuffer: LPSTR, ExeNameBufferLength: DWORD, ) -> DWORD451     pub fn GetConsoleAliasExesA(
452         ExeNameBuffer: LPSTR,
453         ExeNameBufferLength: DWORD,
454     ) -> DWORD;
GetConsoleAliasExesW( ExeNameBuffer: LPWSTR, ExeNameBufferLength: DWORD, ) -> DWORD455     pub fn GetConsoleAliasExesW(
456         ExeNameBuffer: LPWSTR,
457         ExeNameBufferLength: DWORD,
458     ) -> DWORD;
459 }
460