8 #if (_WIN32_WINNT >= 0x0600) && !defined(NOGDI)
14 #pragma warning(disable:4820)
18 * Special PID for parent process for AttachConsole API
20 #if (_WIN32_WINNT >= 0x0501)
21 #define ATTACH_PARENT_PROCESS ((DWORD)-1)
25 * Console display modes
27 #define CONSOLE_FULLSCREEN 1
28 #define CONSOLE_FULLSCREEN_HARDWARE 2
29 #if (_WIN32_WINNT >= 0x0600)
30 #define CONSOLE_OVERSTRIKE 1
33 #define CONSOLE_FULLSCREEN_MODE 1
34 #define CONSOLE_WINDOWED_MODE 2
37 * Color attributes for text and screen background
39 #define FOREGROUND_BLUE 0x0001
40 #define FOREGROUND_GREEN 0x0002
41 #define FOREGROUND_RED 0x0004
42 #define FOREGROUND_INTENSITY 0x0008
43 #define BACKGROUND_BLUE 0x0010
44 #define BACKGROUND_GREEN 0x0020
45 #define BACKGROUND_RED 0x0040
46 #define BACKGROUND_INTENSITY 0x0080
48 #define COMMON_LVB_LEADING_BYTE 0x0100
49 #define COMMON_LVB_TRAILING_BYTE 0x0200
50 #define COMMON_LVB_GRID_HORIZONTAL 0x0400
51 #define COMMON_LVB_GRID_LVERTICAL 0x0800
52 #define COMMON_LVB_GRID_RVERTICAL 0x1000
53 #define COMMON_LVB_REVERSE_VIDEO 0x4000
54 #define COMMON_LVB_UNDERSCORE 0x8000
57 * Control handler codes
59 #define CTRL_C_EVENT 0
60 #define CTRL_BREAK_EVENT 1
61 #define CTRL_CLOSE_EVENT 2
62 #define CTRL_LOGOFF_EVENT 5
63 #define CTRL_SHUTDOWN_EVENT 6
68 #define ENABLE_PROCESSED_INPUT 0x0001
69 #define ENABLE_LINE_INPUT 0x0002
70 #define ENABLE_ECHO_INPUT 0x0004
71 #define ENABLE_WINDOW_INPUT 0x0008
72 #define ENABLE_MOUSE_INPUT 0x0010
73 #define ENABLE_INSERT_MODE 0x0020
74 #define ENABLE_QUICK_EDIT_MODE 0x0040
75 #define ENABLE_EXTENDED_FLAGS 0x0080
76 #if (_WIN32_WINNT >= 0x0600)
77 #define ENABLE_AUTO_POSITION 0x0100
83 #define ENABLE_PROCESSED_OUTPUT 0x0001
84 #define ENABLE_WRAP_AT_EOL_OUTPUT 0x0002
87 * Console selection flags
89 #define CONSOLE_NO_SELECTION 0x0000
90 #define CONSOLE_SELECTION_IN_PROGRESS 0x0001
91 #define CONSOLE_SELECTION_NOT_EMPTY 0x0002
92 #define CONSOLE_MOUSE_SELECTION 0x0004
93 #define CONSOLE_MOUSE_DOWN 0x0008
96 * History duplicate flags
98 #if (_WIN32_WINNT >= 0x0600)
99 #define HISTORY_NO_DUP_FLAG 0x0001
105 #define KEY_EVENT 0x0001
106 #define MOUSE_EVENT 0x0002
107 #define WINDOW_BUFFER_SIZE_EVENT 0x0004
108 #define MENU_EVENT 0x0008
109 #define FOCUS_EVENT 0x0010
112 * ControlKeyState flags
114 #define RIGHT_ALT_PRESSED 0x0001
115 #define LEFT_ALT_PRESSED 0x0002
116 #define RIGHT_CTRL_PRESSED 0x0004
117 #define LEFT_CTRL_PRESSED 0x0008
118 #define SHIFT_PRESSED 0x0010
119 #define NUMLOCK_ON 0x0020
120 #define SCROLLLOCK_ON 0x0040
121 #define CAPSLOCK_ON 0x0080
122 #define ENHANCED_KEY 0x0100
127 #define FROM_LEFT_1ST_BUTTON_PRESSED 0x0001
128 #define RIGHTMOST_BUTTON_PRESSED 0x0002
129 #define FROM_LEFT_2ND_BUTTON_PRESSED 0x0004
130 #define FROM_LEFT_3RD_BUTTON_PRESSED 0x0008
131 #define FROM_LEFT_4TH_BUTTON_PRESSED 0x0010
136 #define MOUSE_MOVED 0x0001
137 #define DOUBLE_CLICK 0x0002
138 #define MOUSE_WHEELED 0x0004
139 #if (_WIN32_WINNT >= 0x0600)
140 #define MOUSE_HWHEELED 0x0008
143 typedef struct _CONSOLE_READCONSOLE_CONTROL
{
146 ULONG dwCtrlWakeupMask
;
147 ULONG dwControlKeyState
;
148 } CONSOLE_READCONSOLE_CONTROL
, *PCONSOLE_READCONSOLE_CONTROL
;
150 typedef struct _CHAR_INFO
{
156 } CHAR_INFO
,*PCHAR_INFO
;
157 typedef struct _SMALL_RECT
{
162 } SMALL_RECT
,*PSMALL_RECT
;
163 typedef struct _CONSOLE_CURSOR_INFO
{
166 } CONSOLE_CURSOR_INFO
,*PCONSOLE_CURSOR_INFO
;
167 typedef struct _COORD
{
171 typedef struct _CONSOLE_SELECTION_INFO
{
173 COORD dwSelectionAnchor
;
174 SMALL_RECT srSelection
;
175 } CONSOLE_SELECTION_INFO
, *PCONSOLE_SELECTION_INFO
;
176 typedef struct _CONSOLE_FONT_INFO
{
179 } CONSOLE_FONT_INFO
, *PCONSOLE_FONT_INFO
;
180 typedef struct _CONSOLE_SCREEN_BUFFER_INFO
{
182 COORD dwCursorPosition
;
185 COORD dwMaximumWindowSize
;
186 } CONSOLE_SCREEN_BUFFER_INFO
,*PCONSOLE_SCREEN_BUFFER_INFO
;
187 typedef BOOL(CALLBACK
*PHANDLER_ROUTINE
)(_In_ DWORD
);
188 typedef struct _KEY_EVENT_RECORD
{
191 WORD wVirtualKeyCode
;
192 WORD wVirtualScanCode
;
197 DWORD dwControlKeyState
;
200 /* gcc's alignment is not what win32 expects */
204 typedef struct _MOUSE_EVENT_RECORD
{
205 COORD dwMousePosition
;
207 DWORD dwControlKeyState
;
209 } MOUSE_EVENT_RECORD
;
210 typedef struct _WINDOW_BUFFER_SIZE_RECORD
{ COORD dwSize
; } WINDOW_BUFFER_SIZE_RECORD
;
211 typedef struct _MENU_EVENT_RECORD
{ UINT dwCommandId
; } MENU_EVENT_RECORD
,*PMENU_EVENT_RECORD
;
212 typedef struct _FOCUS_EVENT_RECORD
{ BOOL bSetFocus
; } FOCUS_EVENT_RECORD
;
213 typedef struct _INPUT_RECORD
{
216 KEY_EVENT_RECORD KeyEvent
;
217 MOUSE_EVENT_RECORD MouseEvent
;
218 WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent
;
219 MENU_EVENT_RECORD MenuEvent
;
220 FOCUS_EVENT_RECORD FocusEvent
;
222 } INPUT_RECORD
,*PINPUT_RECORD
;
224 #if (_WIN32_WINNT >= 0x0600)
225 typedef struct _CONSOLE_HISTORY_INFO
{
227 UINT HistoryBufferSize
;
228 UINT NumberOfHistoryBuffers
;
230 } CONSOLE_HISTORY_INFO
, *PCONSOLE_HISTORY_INFO
;
232 typedef struct _CONSOLE_SCREEN_BUFFER_INFOEX
{
235 COORD dwCursorPosition
;
238 COORD dwMaximumWindowSize
;
239 WORD wPopupAttributes
;
240 COLORREF ColorTable
[16];
241 } CONSOLE_SCREEN_BUFFER_INFOEX
, *PCONSOLE_SCREEN_BUFFER_INFOEX
;
244 typedef struct _CONSOLE_FONT_INFOEX
{
250 WCHAR FaceName
[LF_FACESIZE
];
251 } CONSOLE_FONT_INFOEX
, *PCONSOLE_FONT_INFOEX
;
255 BOOL WINAPI
AllocConsole(VOID
);
257 #if (_WIN32_WINNT >= 0x0501)
258 BOOL WINAPI
AttachConsole(_In_ DWORD
);
260 BOOL WINAPI
AddConsoleAliasA(_In_ LPCSTR
, _In_ LPCSTR
, _In_ LPCSTR
);
261 BOOL WINAPI
AddConsoleAliasW(_In_ LPCWSTR
, _In_ LPCWSTR
, _In_ LPCWSTR
);
267 _Out_writes_(TargetBufferLength
) LPSTR TargetBuffer
,
268 _In_ DWORD TargetBufferLength
,
275 _Out_writes_(TargetBufferLength
) LPWSTR TargetBuffer
,
276 _In_ DWORD TargetBufferLength
,
277 _In_ LPWSTR ExeName
);
282 _Out_writes_(AliasBufferLength
) LPSTR AliasBuffer
,
283 _In_ DWORD AliasBufferLength
,
289 _Out_writes_(AliasBufferLength
) LPWSTR AliasBuffer
,
290 _In_ DWORD AliasBufferLength
,
291 _In_ LPWSTR ExeName
);
293 DWORD WINAPI
GetConsoleAliasesLengthA(_In_ LPSTR ExeName
);
294 DWORD WINAPI
GetConsoleAliasesLengthW(_In_ LPWSTR ExeName
);
298 GetConsoleAliasExesA(
299 _Out_writes_(ExeNameBufferLength
) LPSTR ExeNameBuffer
,
300 _In_ DWORD ExeNameBufferLength
);
304 GetConsoleAliasExesW(
305 _Out_writes_(ExeNameBufferLength
) LPWSTR ExeNameBuffer
,
306 _In_ DWORD ExeNameBufferLength
);
308 DWORD WINAPI
GetConsoleAliasExesLengthA(VOID
);
309 DWORD WINAPI
GetConsoleAliasExesLengthW(VOID
);
312 HANDLE WINAPI
CreateConsoleScreenBuffer(_In_ DWORD
, _In_ DWORD
, _In_opt_ CONST SECURITY_ATTRIBUTES
*, _In_ DWORD
, _Reserved_ LPVOID
);
313 BOOL WINAPI
FillConsoleOutputAttribute(_In_ HANDLE
, _In_ WORD
, _In_ DWORD
, _In_ COORD
, _Out_ PDWORD
);
314 BOOL WINAPI
FillConsoleOutputCharacterA(_In_ HANDLE
, _In_ CHAR
, _In_ DWORD
, _In_ COORD
, _Out_ PDWORD
);
315 BOOL WINAPI
FillConsoleOutputCharacterW(_In_ HANDLE
, _In_ WCHAR
, _In_ DWORD
, _In_ COORD
, _Out_ PDWORD
);
316 BOOL WINAPI
FlushConsoleInputBuffer(_In_ HANDLE
);
317 BOOL WINAPI
FreeConsole(VOID
);
318 BOOL WINAPI
GenerateConsoleCtrlEvent(_In_ DWORD
, _In_ DWORD
);
319 UINT WINAPI
GetConsoleCP(VOID
);
320 BOOL WINAPI
GetConsoleCursorInfo(_In_ HANDLE
, _Out_ PCONSOLE_CURSOR_INFO
);
321 BOOL WINAPI
GetConsoleMode(HANDLE
,PDWORD
);
322 UINT WINAPI
GetConsoleOutputCP(VOID
);
323 BOOL WINAPI
GetConsoleScreenBufferInfo(_In_ HANDLE
, _Out_ PCONSOLE_SCREEN_BUFFER_INFO
);
328 _Out_writes_(nSize
) LPSTR lpConsoleTitle
,
334 _Out_writes_(nSize
) LPWSTR lpConsoleTitle
,
337 #if (_WIN32_WINNT >= 0x0500)
338 HWND WINAPI
GetConsoleWindow(VOID
);
339 BOOL APIENTRY
GetConsoleDisplayMode(_Out_ LPDWORD lpModeFlags
);
340 BOOL APIENTRY
SetConsoleDisplayMode(_In_ HANDLE hConsoleOutput
, _In_ DWORD dwFlags
, _Out_opt_ PCOORD lpNewScreenBufferDimensions
);
342 COORD WINAPI
GetLargestConsoleWindowSize(_In_ HANDLE
);
343 BOOL WINAPI
GetNumberOfConsoleInputEvents(HANDLE
,PDWORD
);
344 BOOL WINAPI
GetNumberOfConsoleMouseButtons(_Out_ PDWORD
);
345 BOOL WINAPI
PeekConsoleInputA(HANDLE
,PINPUT_RECORD
,DWORD
,PDWORD
);
350 _In_ HANDLE hConsoleInput
,
351 _Out_writes_(nLength
) PINPUT_RECORD lpBuffer
,
353 _Out_ LPDWORD lpNumberOfEventsRead
);
355 BOOL WINAPI
ReadConsoleA(HANDLE
,PVOID
,DWORD
,PDWORD
,PCONSOLE_READCONSOLE_CONTROL
);
356 BOOL WINAPI
ReadConsoleW(HANDLE
,PVOID
,DWORD
,PDWORD
,PCONSOLE_READCONSOLE_CONTROL
);
357 BOOL WINAPI
ReadConsoleInputA(HANDLE
,PINPUT_RECORD
,DWORD
,PDWORD
);
358 BOOL WINAPI
ReadConsoleInputW(HANDLE
,PINPUT_RECORD
,DWORD
,PDWORD
);
362 ReadConsoleOutputAttribute(
363 _In_ HANDLE hConsoleOutput
,
364 _Out_writes_(nLength
) LPWORD lpAttribute
,
366 _In_ COORD dwReadCoord
,
367 _Out_ LPDWORD lpNumberOfAttrsRead
);
371 ReadConsoleOutputCharacterA(
372 _In_ HANDLE hConsoleOutput
,
373 _Out_writes_(nLength
) LPSTR lpCharacter
,
375 _In_ COORD dwReadCoord
,
376 _Out_ LPDWORD lpNumberOfCharsRead
);
380 ReadConsoleOutputCharacterW(
381 _In_ HANDLE hConsoleOutput
,
382 _Out_writes_(nLength
) LPWSTR lpCharacter
,
384 _In_ COORD dwReadCoord
,
385 _Out_ LPDWORD lpNumberOfCharsRead
);
390 _In_ HANDLE hConsoleOutput
,
391 _Out_writes_(dwBufferSize
.X
* dwBufferSize
.Y
) PCHAR_INFO lpBuffer
,
392 _In_ COORD dwBufferSize
,
393 _In_ COORD dwBufferCoord
,
394 _Inout_ PSMALL_RECT lpReadRegion
);
399 _In_ HANDLE hConsoleOutput
,
400 _Out_writes_(dwBufferSize
.X
* dwBufferSize
.Y
) PCHAR_INFO lpBuffer
,
401 _In_ COORD dwBufferSize
,
402 _In_ COORD dwBufferCoord
,
403 _Inout_ PSMALL_RECT lpReadRegion
);
405 BOOL WINAPI
ScrollConsoleScreenBufferA(_In_ HANDLE
, _In_
const SMALL_RECT
*, _In_opt_
const SMALL_RECT
*, _In_ COORD
, _In_
const CHAR_INFO
*);
406 BOOL WINAPI
ScrollConsoleScreenBufferW(_In_ HANDLE
, _In_
const SMALL_RECT
*, _In_opt_
const SMALL_RECT
*, _In_ COORD
, _In_
const CHAR_INFO
*);
407 BOOL WINAPI
SetConsoleActiveScreenBuffer(_In_ HANDLE
);
408 BOOL WINAPI
SetConsoleCP(_In_ UINT
);
409 BOOL WINAPI
SetConsoleCtrlHandler(PHANDLER_ROUTINE
,BOOL
);
410 BOOL WINAPI
SetConsoleCursorInfo(_In_ HANDLE
, _In_
const CONSOLE_CURSOR_INFO
*);
411 BOOL WINAPI
SetConsoleCursorPosition(_In_ HANDLE
, _In_ COORD
);
412 BOOL WINAPI
SetConsoleMode(HANDLE
,DWORD
);
413 BOOL WINAPI
SetConsoleOutputCP(_In_ UINT
);
414 BOOL WINAPI
SetConsoleScreenBufferSize(_In_ HANDLE
, _In_ COORD
);
415 BOOL WINAPI
SetConsoleTextAttribute(_In_ HANDLE
, _In_ WORD
);
416 BOOL WINAPI
SetConsoleTitleA(_In_ LPCSTR
);
417 BOOL WINAPI
SetConsoleTitleW(_In_ LPCWSTR
);
418 BOOL WINAPI
SetConsoleWindowInfo(_In_ HANDLE
, _In_ BOOL
, _In_
const SMALL_RECT
*);
419 BOOL WINAPI
WriteConsoleA(HANDLE
,CONST VOID
*,DWORD
,LPDWORD
,LPVOID
);
420 BOOL WINAPI
WriteConsoleW(HANDLE
,CONST VOID
*,DWORD
,LPDWORD
,LPVOID
);
425 _In_ HANDLE hConsoleInput
,
426 _In_reads_(nLength
) CONST INPUT_RECORD
*lpBuffer
,
428 _Out_ LPDWORD lpNumberOfEventsWritten
);
433 _In_ HANDLE hConsoleInput
,
434 _In_reads_(nLength
) CONST INPUT_RECORD
*lpBuffer
,
436 _Out_ LPDWORD lpNumberOfEventsWritten
);
441 _In_ HANDLE hConsoleOutput
,
442 _In_reads_(dwBufferSize
.X
* dwBufferSize
.Y
) CONST CHAR_INFO
*lpBuffer
,
443 _In_ COORD dwBufferSize
,
444 _In_ COORD dwBufferCoord
,
445 _Inout_ PSMALL_RECT lpWriteRegion
);
450 _In_ HANDLE hConsoleOutput
,
451 _In_reads_(dwBufferSize
.X
* dwBufferSize
.Y
) CONST CHAR_INFO
*lpBuffer
,
452 _In_ COORD dwBufferSize
,
453 _In_ COORD dwBufferCoord
,
454 _Inout_ PSMALL_RECT lpWriteRegion
);
458 WriteConsoleOutputAttribute(
459 _In_ HANDLE hConsoleOutput
,
460 _In_reads_(nLength
) CONST WORD
*lpAttribute
,
462 _In_ COORD dwWriteCoord
,
463 _Out_ LPDWORD lpNumberOfAttrsWritten
);
467 WriteConsoleOutputCharacterA(
468 _In_ HANDLE hConsoleOutput
,
469 _In_reads_(nLength
) LPCSTR lpCharacter
,
471 _In_ COORD dwWriteCoord
,
472 _Out_ LPDWORD lpNumberOfCharsWritten
);
476 WriteConsoleOutputCharacterW(
477 _In_ HANDLE hConsoleOutput
,
478 _In_reads_(nLength
) LPCWSTR lpCharacter
,
480 _In_ COORD dwWriteCoord
,
481 _Out_ LPDWORD lpNumberOfCharsWritten
);
485 #define AddConsoleAlias AddConsoleAliasW
486 #define GetConsoleAlias GetConsoleAliasW
487 #define GetConsoleAliases GetConsoleAliasesW
488 #define GetConsoleAliasesLength GetConsoleAliasesLengthW
489 #define GetConsoleAliasExes GetConsoleAliasExesW
490 #define GetConsoleAliasExesLength GetConsoleAliasExesLengthW
491 #define GetConsoleTitle GetConsoleTitleW
492 #define PeekConsoleInput PeekConsoleInputW
493 #define ReadConsole ReadConsoleW
494 #define ReadConsoleInput ReadConsoleInputW
495 #define ReadConsoleOutput ReadConsoleOutputW
496 #define ReadConsoleOutputCharacter ReadConsoleOutputCharacterW
497 #define ScrollConsoleScreenBuffer ScrollConsoleScreenBufferW
498 #define SetConsoleTitle SetConsoleTitleW
499 #define WriteConsole WriteConsoleW
500 #define WriteConsoleInput WriteConsoleInputW
501 #define WriteConsoleOutput WriteConsoleOutputW
502 #define FillConsoleOutputCharacter FillConsoleOutputCharacterW
503 #define WriteConsoleOutputCharacter WriteConsoleOutputCharacterW
505 #define AddConsoleAlias AddConsoleAliasA
506 #define GetConsoleAlias GetConsoleAliasA
507 #define GetConsoleAliases GetConsoleAliasesA
508 #define GetConsoleAliasesLength GetConsoleAliasesLengthA
509 #define GetConsoleAliasExes GetConsoleAliasExesA
510 #define GetConsoleAliasExesLength GetConsoleAliasExesLengthA
511 #define GetConsoleTitle GetConsoleTitleA
512 #define PeekConsoleInput PeekConsoleInputA
513 #define ReadConsole ReadConsoleA
514 #define ReadConsoleInput ReadConsoleInputA
515 #define ReadConsoleOutput ReadConsoleOutputA
516 #define ReadConsoleOutputCharacter ReadConsoleOutputCharacterA
517 #define ScrollConsoleScreenBuffer ScrollConsoleScreenBufferA
518 #define SetConsoleTitle SetConsoleTitleA
519 #define WriteConsole WriteConsoleA
520 #define WriteConsoleInput WriteConsoleInputA
521 #define WriteConsoleOutput WriteConsoleOutputA
522 #define FillConsoleOutputCharacter FillConsoleOutputCharacterA
523 #define WriteConsoleOutputCharacter WriteConsoleOutputCharacterA