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 // These codes are answered by GetConsoleDisplayMode
28 #define CONSOLE_WINDOWED 0
29 #define CONSOLE_FULLSCREEN 1
30 #if (_WIN32_WINNT >= 0x0600)
31 #define CONSOLE_OVERSTRIKE 1
33 #define CONSOLE_FULLSCREEN_HARDWARE 2
35 // These codes should be given to SetConsoleDisplayMode
36 #define CONSOLE_FULLSCREEN_MODE 1
37 #define CONSOLE_WINDOWED_MODE 2
40 * Color attributes for text and screen background
42 #define FOREGROUND_BLUE 0x0001
43 #define FOREGROUND_GREEN 0x0002
44 #define FOREGROUND_RED 0x0004
45 #define FOREGROUND_INTENSITY 0x0008
46 #define BACKGROUND_BLUE 0x0010
47 #define BACKGROUND_GREEN 0x0020
48 #define BACKGROUND_RED 0x0040
49 #define BACKGROUND_INTENSITY 0x0080
51 #define COMMON_LVB_LEADING_BYTE 0x0100
52 #define COMMON_LVB_TRAILING_BYTE 0x0200
53 #define COMMON_LVB_GRID_HORIZONTAL 0x0400
54 #define COMMON_LVB_GRID_LVERTICAL 0x0800
55 #define COMMON_LVB_GRID_RVERTICAL 0x1000
56 #define COMMON_LVB_REVERSE_VIDEO 0x4000
57 #define COMMON_LVB_UNDERSCORE 0x8000
62 #define CONSOLE_TEXTMODE_BUFFER 1
63 #define CONSOLE_GRAPHICS_BUFFER 2 /* Undocumented, see http://blog.airesoft.co.uk/2012/10/things-ms-can-do-that-they-dont-tell-you-about-console-graphics/ */
66 * Control handler codes
68 #define CTRL_C_EVENT 0
69 #define CTRL_BREAK_EVENT 1
70 #define CTRL_CLOSE_EVENT 2
71 #define CTRL_LOGOFF_EVENT 5
72 #define CTRL_SHUTDOWN_EVENT 6
77 #define ENABLE_PROCESSED_INPUT 0x0001
78 #define ENABLE_LINE_INPUT 0x0002
79 #define ENABLE_ECHO_INPUT 0x0004
80 #define ENABLE_WINDOW_INPUT 0x0008
81 #define ENABLE_MOUSE_INPUT 0x0010
82 #define ENABLE_INSERT_MODE 0x0020
83 #define ENABLE_QUICK_EDIT_MODE 0x0040
84 #define ENABLE_EXTENDED_FLAGS 0x0080
85 #if (_WIN32_WINNT >= 0x0600)
86 #define ENABLE_AUTO_POSITION 0x0100
92 #define ENABLE_PROCESSED_OUTPUT 0x0001
93 #define ENABLE_WRAP_AT_EOL_OUTPUT 0x0002
96 * Console selection flags
98 #define CONSOLE_NO_SELECTION 0x0000
99 #define CONSOLE_SELECTION_IN_PROGRESS 0x0001
100 #define CONSOLE_SELECTION_NOT_EMPTY 0x0002
101 #define CONSOLE_MOUSE_SELECTION 0x0004
102 #define CONSOLE_MOUSE_DOWN 0x0008
105 * History duplicate flags
107 #if (_WIN32_WINNT >= 0x0600)
108 #define HISTORY_NO_DUP_FLAG 0x0001
114 #define KEY_EVENT 0x0001
115 #define MOUSE_EVENT 0x0002
116 #define WINDOW_BUFFER_SIZE_EVENT 0x0004
117 #define MENU_EVENT 0x0008
118 #define FOCUS_EVENT 0x0010
121 * ControlKeyState flags
123 #define RIGHT_ALT_PRESSED 0x0001
124 #define LEFT_ALT_PRESSED 0x0002
125 #define RIGHT_CTRL_PRESSED 0x0004
126 #define LEFT_CTRL_PRESSED 0x0008
127 #define SHIFT_PRESSED 0x0010
128 #define NUMLOCK_ON 0x0020
129 #define SCROLLLOCK_ON 0x0040
130 #define CAPSLOCK_ON 0x0080
131 #define ENHANCED_KEY 0x0100
136 #define FROM_LEFT_1ST_BUTTON_PRESSED 0x0001
137 #define RIGHTMOST_BUTTON_PRESSED 0x0002
138 #define FROM_LEFT_2ND_BUTTON_PRESSED 0x0004
139 #define FROM_LEFT_3RD_BUTTON_PRESSED 0x0008
140 #define FROM_LEFT_4TH_BUTTON_PRESSED 0x0010
145 #define MOUSE_MOVED 0x0001
146 #define DOUBLE_CLICK 0x0002
147 #define MOUSE_WHEELED 0x0004
148 #if (_WIN32_WINNT >= 0x0600)
149 #define MOUSE_HWHEELED 0x0008
152 typedef struct _CONSOLE_READCONSOLE_CONTROL
{
155 ULONG dwCtrlWakeupMask
;
156 ULONG dwControlKeyState
;
157 } CONSOLE_READCONSOLE_CONTROL
, *PCONSOLE_READCONSOLE_CONTROL
;
159 typedef struct _CHAR_INFO
{
165 } CHAR_INFO
,*PCHAR_INFO
;
167 typedef struct _SMALL_RECT
{
172 } SMALL_RECT
,*PSMALL_RECT
;
174 typedef struct _CONSOLE_CURSOR_INFO
{
177 } CONSOLE_CURSOR_INFO
,*PCONSOLE_CURSOR_INFO
;
179 typedef struct _COORD
{
184 typedef struct _CONSOLE_SELECTION_INFO
{
186 COORD dwSelectionAnchor
;
187 SMALL_RECT srSelection
;
188 } CONSOLE_SELECTION_INFO
, *PCONSOLE_SELECTION_INFO
;
190 typedef struct _CONSOLE_FONT_INFO
{
193 } CONSOLE_FONT_INFO
, *PCONSOLE_FONT_INFO
;
195 typedef struct _CONSOLE_SCREEN_BUFFER_INFO
{
197 COORD dwCursorPosition
;
200 COORD dwMaximumWindowSize
;
201 } CONSOLE_SCREEN_BUFFER_INFO
,*PCONSOLE_SCREEN_BUFFER_INFO
;
203 /* Undocumented, see http://blog.airesoft.co.uk/2012/10/things-ms-can-do-that-they-dont-tell-you-about-console-graphics/ */
204 #if defined(_WINGDI_) && !defined(NOGDI)
205 typedef struct _CONSOLE_GRAPHICS_BUFFER_INFO
{
206 DWORD dwBitMapInfoLength
;
207 LPBITMAPINFO lpBitMapInfo
;
208 DWORD dwUsage
; // DIB_PAL_COLORS or DIB_RGB_COLORS
211 } CONSOLE_GRAPHICS_BUFFER_INFO
, *PCONSOLE_GRAPHICS_BUFFER_INFO
;
214 typedef BOOL(CALLBACK
*PHANDLER_ROUTINE
)(_In_ DWORD
);
216 typedef struct _KEY_EVENT_RECORD
{
219 WORD wVirtualKeyCode
;
220 WORD wVirtualScanCode
;
225 DWORD dwControlKeyState
;
228 /* gcc's alignment is not what win32 expects */
233 typedef struct _MOUSE_EVENT_RECORD
{
234 COORD dwMousePosition
;
236 DWORD dwControlKeyState
;
238 } MOUSE_EVENT_RECORD
;
240 typedef struct _WINDOW_BUFFER_SIZE_RECORD
{ COORD dwSize
; } WINDOW_BUFFER_SIZE_RECORD
;
241 typedef struct _MENU_EVENT_RECORD
{ UINT dwCommandId
; } MENU_EVENT_RECORD
,*PMENU_EVENT_RECORD
;
242 typedef struct _FOCUS_EVENT_RECORD
{ BOOL bSetFocus
; } FOCUS_EVENT_RECORD
;
244 typedef struct _INPUT_RECORD
{
247 KEY_EVENT_RECORD KeyEvent
;
248 MOUSE_EVENT_RECORD MouseEvent
;
249 WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent
;
250 MENU_EVENT_RECORD MenuEvent
;
251 FOCUS_EVENT_RECORD FocusEvent
;
253 } INPUT_RECORD
,*PINPUT_RECORD
;
255 #if (_WIN32_WINNT >= 0x0600)
256 typedef struct _CONSOLE_HISTORY_INFO
{
258 UINT HistoryBufferSize
;
259 UINT NumberOfHistoryBuffers
;
261 } CONSOLE_HISTORY_INFO
, *PCONSOLE_HISTORY_INFO
;
263 typedef struct _CONSOLE_SCREEN_BUFFER_INFOEX
{
266 COORD dwCursorPosition
;
269 COORD dwMaximumWindowSize
;
270 WORD wPopupAttributes
;
271 COLORREF ColorTable
[16];
272 } CONSOLE_SCREEN_BUFFER_INFOEX
, *PCONSOLE_SCREEN_BUFFER_INFOEX
;
275 typedef struct _CONSOLE_FONT_INFOEX
{
281 WCHAR FaceName
[LF_FACESIZE
];
282 } CONSOLE_FONT_INFOEX
, *PCONSOLE_FONT_INFOEX
;
286 BOOL WINAPI
AllocConsole(VOID
);
288 #if (_WIN32_WINNT >= 0x0501)
289 BOOL WINAPI
AttachConsole(_In_ DWORD
);
291 BOOL WINAPI
AddConsoleAliasA(_In_ LPCSTR
, _In_ LPCSTR
, _In_ LPCSTR
);
292 BOOL WINAPI
AddConsoleAliasW(_In_ LPCWSTR
, _In_ LPCWSTR
, _In_ LPCWSTR
);
298 _Out_writes_(TargetBufferLength
) LPSTR TargetBuffer
,
299 _In_ DWORD TargetBufferLength
,
306 _Out_writes_(TargetBufferLength
) LPWSTR TargetBuffer
,
307 _In_ DWORD TargetBufferLength
,
308 _In_ LPWSTR ExeName
);
313 _Out_writes_(AliasBufferLength
) LPSTR AliasBuffer
,
314 _In_ DWORD AliasBufferLength
,
320 _Out_writes_(AliasBufferLength
) LPWSTR AliasBuffer
,
321 _In_ DWORD AliasBufferLength
,
322 _In_ LPWSTR ExeName
);
324 DWORD WINAPI
GetConsoleAliasesLengthA(_In_ LPSTR ExeName
);
325 DWORD WINAPI
GetConsoleAliasesLengthW(_In_ LPWSTR ExeName
);
329 GetConsoleAliasExesA(
330 _Out_writes_(ExeNameBufferLength
) LPSTR ExeNameBuffer
,
331 _In_ DWORD ExeNameBufferLength
);
335 GetConsoleAliasExesW(
336 _Out_writes_(ExeNameBufferLength
) LPWSTR ExeNameBuffer
,
337 _In_ DWORD ExeNameBufferLength
);
339 DWORD WINAPI
GetConsoleAliasExesLengthA(VOID
);
340 DWORD WINAPI
GetConsoleAliasExesLengthW(VOID
);
343 HANDLE WINAPI
CreateConsoleScreenBuffer(_In_ DWORD
, _In_ DWORD
, _In_opt_ CONST SECURITY_ATTRIBUTES
*, _In_ DWORD
, _Reserved_ LPVOID
);
344 BOOL WINAPI
FillConsoleOutputAttribute(_In_ HANDLE
, _In_ WORD
, _In_ DWORD
, _In_ COORD
, _Out_ PDWORD
);
345 BOOL WINAPI
FillConsoleOutputCharacterA(_In_ HANDLE
, _In_ CHAR
, _In_ DWORD
, _In_ COORD
, _Out_ PDWORD
);
346 BOOL WINAPI
FillConsoleOutputCharacterW(_In_ HANDLE
, _In_ WCHAR
, _In_ DWORD
, _In_ COORD
, _Out_ PDWORD
);
347 BOOL WINAPI
FlushConsoleInputBuffer(_In_ HANDLE
);
348 BOOL WINAPI
FreeConsole(VOID
);
349 BOOL WINAPI
GenerateConsoleCtrlEvent(_In_ DWORD
, _In_ DWORD
);
350 UINT WINAPI
GetConsoleCP(VOID
);
351 BOOL WINAPI
GetConsoleCursorInfo(_In_ HANDLE
, _Out_ PCONSOLE_CURSOR_INFO
);
352 BOOL WINAPI
GetConsoleMode(HANDLE
,PDWORD
);
353 UINT WINAPI
GetConsoleOutputCP(VOID
);
354 BOOL WINAPI
GetConsoleScreenBufferInfo(_In_ HANDLE
, _Out_ PCONSOLE_SCREEN_BUFFER_INFO
);
356 /* Undocumented, see http://blog.airesoft.co.uk/2012/10/things-ms-can-do-that-they-dont-tell-you-about-console-graphics/ */
357 BOOL WINAPI
InvalidateConsoleDIBits(_In_ HANDLE
, _In_ PSMALL_RECT
);
362 _Out_writes_(nSize
) LPSTR lpConsoleTitle
,
368 _Out_writes_(nSize
) LPWSTR lpConsoleTitle
,
371 #if (_WIN32_WINNT >= 0x0500)
372 HWND WINAPI
GetConsoleWindow(VOID
);
373 BOOL APIENTRY
GetConsoleDisplayMode(_Out_ LPDWORD lpModeFlags
);
374 BOOL APIENTRY
SetConsoleDisplayMode(_In_ HANDLE hConsoleOutput
, _In_ DWORD dwFlags
, _Out_opt_ PCOORD lpNewScreenBufferDimensions
);
376 COORD WINAPI
GetLargestConsoleWindowSize(_In_ HANDLE
);
377 BOOL WINAPI
GetNumberOfConsoleInputEvents(HANDLE
,PDWORD
);
378 BOOL WINAPI
GetNumberOfConsoleMouseButtons(_Out_ PDWORD
);
380 BOOL WINAPI
PeekConsoleInputA(HANDLE
,PINPUT_RECORD
,DWORD
,PDWORD
);
385 _In_ HANDLE hConsoleInput
,
386 _Out_writes_(nLength
) PINPUT_RECORD lpBuffer
,
388 _Out_ LPDWORD lpNumberOfEventsRead
);
390 BOOL WINAPI
ReadConsoleA(HANDLE
,PVOID
,DWORD
,PDWORD
,PCONSOLE_READCONSOLE_CONTROL
);
391 BOOL WINAPI
ReadConsoleW(HANDLE
,PVOID
,DWORD
,PDWORD
,PCONSOLE_READCONSOLE_CONTROL
);
392 BOOL WINAPI
ReadConsoleInputA(HANDLE
,PINPUT_RECORD
,DWORD
,PDWORD
);
393 BOOL WINAPI
ReadConsoleInputW(HANDLE
,PINPUT_RECORD
,DWORD
,PDWORD
);
397 ReadConsoleOutputAttribute(
398 _In_ HANDLE hConsoleOutput
,
399 _Out_writes_(nLength
) LPWORD lpAttribute
,
401 _In_ COORD dwReadCoord
,
402 _Out_ LPDWORD lpNumberOfAttrsRead
);
406 ReadConsoleOutputCharacterA(
407 _In_ HANDLE hConsoleOutput
,
408 _Out_writes_(nLength
) LPSTR lpCharacter
,
410 _In_ COORD dwReadCoord
,
411 _Out_ LPDWORD lpNumberOfCharsRead
);
415 ReadConsoleOutputCharacterW(
416 _In_ HANDLE hConsoleOutput
,
417 _Out_writes_(nLength
) LPWSTR lpCharacter
,
419 _In_ COORD dwReadCoord
,
420 _Out_ LPDWORD lpNumberOfCharsRead
);
425 _In_ HANDLE hConsoleOutput
,
426 _Out_writes_(dwBufferSize
.X
* dwBufferSize
.Y
) PCHAR_INFO lpBuffer
,
427 _In_ COORD dwBufferSize
,
428 _In_ COORD dwBufferCoord
,
429 _Inout_ PSMALL_RECT lpReadRegion
);
434 _In_ HANDLE hConsoleOutput
,
435 _Out_writes_(dwBufferSize
.X
* dwBufferSize
.Y
) PCHAR_INFO lpBuffer
,
436 _In_ COORD dwBufferSize
,
437 _In_ COORD dwBufferCoord
,
438 _Inout_ PSMALL_RECT lpReadRegion
);
440 BOOL WINAPI
ScrollConsoleScreenBufferA(_In_ HANDLE
, _In_
const SMALL_RECT
*, _In_opt_
const SMALL_RECT
*, _In_ COORD
, _In_
const CHAR_INFO
*);
441 BOOL WINAPI
ScrollConsoleScreenBufferW(_In_ HANDLE
, _In_
const SMALL_RECT
*, _In_opt_
const SMALL_RECT
*, _In_ COORD
, _In_
const CHAR_INFO
*);
442 BOOL WINAPI
SetConsoleActiveScreenBuffer(_In_ HANDLE
);
443 BOOL WINAPI
SetConsoleCP(_In_ UINT
);
444 BOOL WINAPI
SetConsoleCtrlHandler(PHANDLER_ROUTINE
,BOOL
);
445 BOOL WINAPI
SetConsoleCursorInfo(_In_ HANDLE
, _In_
const CONSOLE_CURSOR_INFO
*);
446 BOOL WINAPI
SetConsoleCursorPosition(_In_ HANDLE
, _In_ COORD
);
447 BOOL WINAPI
SetConsoleMode(HANDLE
,DWORD
);
448 BOOL WINAPI
SetConsoleOutputCP(_In_ UINT
);
449 BOOL WINAPI
SetConsoleScreenBufferSize(_In_ HANDLE
, _In_ COORD
);
450 BOOL WINAPI
SetConsoleTextAttribute(_In_ HANDLE
, _In_ WORD
);
451 BOOL WINAPI
SetConsoleTitleA(_In_ LPCSTR
);
452 BOOL WINAPI
SetConsoleTitleW(_In_ LPCWSTR
);
453 BOOL WINAPI
SetConsoleWindowInfo(_In_ HANDLE
, _In_ BOOL
, _In_
const SMALL_RECT
*);
455 /* Undocumented, see http://undoc.airesoft.co.uk/kernel32.dll/ConsoleMenuControl.php */
456 HMENU WINAPI
ConsoleMenuControl(_In_ HANDLE
, _In_ DWORD
, _In_ DWORD
);
458 BOOL WINAPI
SetConsoleMenuClose(_In_ BOOL
);
460 BOOL WINAPI
WriteConsoleA(HANDLE
,CONST VOID
*,DWORD
,LPDWORD
,LPVOID
);
461 BOOL WINAPI
WriteConsoleW(HANDLE
,CONST VOID
*,DWORD
,LPDWORD
,LPVOID
);
466 _In_ HANDLE hConsoleInput
,
467 _In_reads_(nLength
) CONST INPUT_RECORD
*lpBuffer
,
469 _Out_ LPDWORD lpNumberOfEventsWritten
);
474 _In_ HANDLE hConsoleInput
,
475 _In_reads_(nLength
) CONST INPUT_RECORD
*lpBuffer
,
477 _Out_ LPDWORD lpNumberOfEventsWritten
);
482 _In_ HANDLE hConsoleOutput
,
483 _In_reads_(dwBufferSize
.X
* dwBufferSize
.Y
) CONST CHAR_INFO
*lpBuffer
,
484 _In_ COORD dwBufferSize
,
485 _In_ COORD dwBufferCoord
,
486 _Inout_ PSMALL_RECT lpWriteRegion
);
491 _In_ HANDLE hConsoleOutput
,
492 _In_reads_(dwBufferSize
.X
* dwBufferSize
.Y
) CONST CHAR_INFO
*lpBuffer
,
493 _In_ COORD dwBufferSize
,
494 _In_ COORD dwBufferCoord
,
495 _Inout_ PSMALL_RECT lpWriteRegion
);
499 WriteConsoleOutputAttribute(
500 _In_ HANDLE hConsoleOutput
,
501 _In_reads_(nLength
) CONST WORD
*lpAttribute
,
503 _In_ COORD dwWriteCoord
,
504 _Out_ LPDWORD lpNumberOfAttrsWritten
);
508 WriteConsoleOutputCharacterA(
509 _In_ HANDLE hConsoleOutput
,
510 _In_reads_(nLength
) LPCSTR lpCharacter
,
512 _In_ COORD dwWriteCoord
,
513 _Out_ LPDWORD lpNumberOfCharsWritten
);
517 WriteConsoleOutputCharacterW(
518 _In_ HANDLE hConsoleOutput
,
519 _In_reads_(nLength
) LPCWSTR lpCharacter
,
521 _In_ COORD dwWriteCoord
,
522 _Out_ LPDWORD lpNumberOfCharsWritten
);
526 #define AddConsoleAlias AddConsoleAliasW
527 #define GetConsoleAlias GetConsoleAliasW
528 #define GetConsoleAliases GetConsoleAliasesW
529 #define GetConsoleAliasesLength GetConsoleAliasesLengthW
530 #define GetConsoleAliasExes GetConsoleAliasExesW
531 #define GetConsoleAliasExesLength GetConsoleAliasExesLengthW
532 #define GetConsoleTitle GetConsoleTitleW
533 #define PeekConsoleInput PeekConsoleInputW
534 #define ReadConsole ReadConsoleW
535 #define ReadConsoleInput ReadConsoleInputW
536 #define ReadConsoleOutput ReadConsoleOutputW
537 #define ReadConsoleOutputCharacter ReadConsoleOutputCharacterW
538 #define ScrollConsoleScreenBuffer ScrollConsoleScreenBufferW
539 #define SetConsoleTitle SetConsoleTitleW
540 #define WriteConsole WriteConsoleW
541 #define WriteConsoleInput WriteConsoleInputW
542 #define WriteConsoleOutput WriteConsoleOutputW
543 #define FillConsoleOutputCharacter FillConsoleOutputCharacterW
544 #define WriteConsoleOutputCharacter WriteConsoleOutputCharacterW
546 #define AddConsoleAlias AddConsoleAliasA
547 #define GetConsoleAlias GetConsoleAliasA
548 #define GetConsoleAliases GetConsoleAliasesA
549 #define GetConsoleAliasesLength GetConsoleAliasesLengthA
550 #define GetConsoleAliasExes GetConsoleAliasExesA
551 #define GetConsoleAliasExesLength GetConsoleAliasExesLengthA
552 #define GetConsoleTitle GetConsoleTitleA
553 #define PeekConsoleInput PeekConsoleInputA
554 #define ReadConsole ReadConsoleA
555 #define ReadConsoleInput ReadConsoleInputA
556 #define ReadConsoleOutput ReadConsoleOutputA
557 #define ReadConsoleOutputCharacter ReadConsoleOutputCharacterA
558 #define ScrollConsoleScreenBuffer ScrollConsoleScreenBufferA
559 #define SetConsoleTitle SetConsoleTitleA
560 #define WriteConsole WriteConsoleA
561 #define WriteConsoleInput WriteConsoleInputA
562 #define WriteConsoleOutput WriteConsoleOutputA
563 #define FillConsoleOutputCharacter FillConsoleOutputCharacterA
564 #define WriteConsoleOutputCharacter WriteConsoleOutputCharacterA