/*
* Console display modes
*/
+// These codes are answered by GetConsoleDisplayMode
+#define CONSOLE_WINDOWED 0
#define CONSOLE_FULLSCREEN 1
-#define CONSOLE_FULLSCREEN_HARDWARE 2
#if (_WIN32_WINNT >= 0x0600)
#define CONSOLE_OVERSTRIKE 1
#endif
+#define CONSOLE_FULLSCREEN_HARDWARE 2
+// These codes should be given to SetConsoleDisplayMode
#define CONSOLE_FULLSCREEN_MODE 1
#define CONSOLE_WINDOWED_MODE 2
#define COMMON_LVB_REVERSE_VIDEO 0x4000
#define COMMON_LVB_UNDERSCORE 0x8000
+/*
+ * Screen buffer types
+ */
+#define CONSOLE_TEXTMODE_BUFFER 1
+#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/ */
+
/*
* Control handler codes
*/
} Char;
WORD Attributes;
} CHAR_INFO,*PCHAR_INFO;
+
typedef struct _SMALL_RECT {
SHORT Left;
SHORT Top;
SHORT Right;
SHORT Bottom;
} SMALL_RECT,*PSMALL_RECT;
+
typedef struct _CONSOLE_CURSOR_INFO {
DWORD dwSize;
BOOL bVisible;
} CONSOLE_CURSOR_INFO,*PCONSOLE_CURSOR_INFO;
+
typedef struct _COORD {
SHORT X;
SHORT Y;
} COORD, *PCOORD;
+
typedef struct _CONSOLE_SELECTION_INFO {
DWORD dwFlags;
COORD dwSelectionAnchor;
SMALL_RECT srSelection;
} CONSOLE_SELECTION_INFO, *PCONSOLE_SELECTION_INFO;
+
typedef struct _CONSOLE_FONT_INFO {
DWORD nFont;
COORD dwFontSize;
} CONSOLE_FONT_INFO, *PCONSOLE_FONT_INFO;
+
typedef struct _CONSOLE_SCREEN_BUFFER_INFO {
COORD dwSize;
COORD dwCursorPosition;
SMALL_RECT srWindow;
COORD dwMaximumWindowSize;
} CONSOLE_SCREEN_BUFFER_INFO,*PCONSOLE_SCREEN_BUFFER_INFO;
+
+/* Undocumented, see http://blog.airesoft.co.uk/2012/10/things-ms-can-do-that-they-dont-tell-you-about-console-graphics/ */
+#if defined(_WINGDI_) && !defined(NOGDI)
+typedef struct _CONSOLE_GRAPHICS_BUFFER_INFO {
+ DWORD dwBitMapInfoLength;
+ LPBITMAPINFO lpBitMapInfo;
+ DWORD dwUsage; // DIB_PAL_COLORS or DIB_RGB_COLORS
+ HANDLE hMutex;
+ PVOID lpBitMap;
+} CONSOLE_GRAPHICS_BUFFER_INFO, *PCONSOLE_GRAPHICS_BUFFER_INFO;
+#endif
+
typedef BOOL(CALLBACK *PHANDLER_ROUTINE)(_In_ DWORD);
+
typedef struct _KEY_EVENT_RECORD {
BOOL bKeyDown;
WORD wRepeatCount;
}
#ifdef __GNUC__
/* gcc's alignment is not what win32 expects */
- PACKED
+PACKED
#endif
KEY_EVENT_RECORD;
+
typedef struct _MOUSE_EVENT_RECORD {
COORD dwMousePosition;
DWORD dwButtonState;
DWORD dwControlKeyState;
DWORD dwEventFlags;
} MOUSE_EVENT_RECORD;
-typedef struct _WINDOW_BUFFER_SIZE_RECORD { COORD dwSize; } WINDOW_BUFFER_SIZE_RECORD;
-typedef struct _MENU_EVENT_RECORD { UINT dwCommandId; } MENU_EVENT_RECORD,*PMENU_EVENT_RECORD;
+
+typedef struct _WINDOW_BUFFER_SIZE_RECORD { COORD dwSize; } WINDOW_BUFFER_SIZE_RECORD;
+typedef struct _MENU_EVENT_RECORD { UINT dwCommandId; } MENU_EVENT_RECORD,*PMENU_EVENT_RECORD;
typedef struct _FOCUS_EVENT_RECORD { BOOL bSetFocus; } FOCUS_EVENT_RECORD;
+
typedef struct _INPUT_RECORD {
WORD EventType;
union {
DWORD WINAPI GetConsoleAliasExesLengthW(VOID);
#endif
-HANDLE WINAPI CreateConsoleScreenBuffer(_In_ DWORD, _In_ DWORD, _In_opt_ CONST SECURITY_ATTRIBUTES*, _In_ DWORD, _Reserved_ LPVOID);
-BOOL WINAPI FillConsoleOutputAttribute(_In_ HANDLE, _In_ WORD, _In_ DWORD, _In_ COORD, _Out_ PDWORD);
-BOOL WINAPI FillConsoleOutputCharacterA(_In_ HANDLE, _In_ CHAR, _In_ DWORD, _In_ COORD, _Out_ PDWORD);
-BOOL WINAPI FillConsoleOutputCharacterW(_In_ HANDLE, _In_ WCHAR, _In_ DWORD, _In_ COORD, _Out_ PDWORD);
+HANDLE
+WINAPI
+CreateConsoleScreenBuffer(
+ _In_ DWORD,
+ _In_ DWORD,
+ _In_opt_ CONST SECURITY_ATTRIBUTES*,
+ _In_ DWORD,
+ _Reserved_ LPVOID);
+
+BOOL
+WINAPI
+FillConsoleOutputAttribute(
+ _In_ HANDLE,
+ _In_ WORD,
+ _In_ DWORD,
+ _In_ COORD,
+ _Out_ PDWORD);
+
+BOOL
+WINAPI
+FillConsoleOutputCharacterA(
+ _In_ HANDLE,
+ _In_ CHAR,
+ _In_ DWORD,
+ _In_ COORD,
+ _Out_ PDWORD);
+
+BOOL
+WINAPI
+FillConsoleOutputCharacterW(
+ _In_ HANDLE,
+ _In_ WCHAR,
+ _In_ DWORD,
+ _In_ COORD,
+ _Out_ PDWORD);
+
BOOL WINAPI FlushConsoleInputBuffer(_In_ HANDLE);
BOOL WINAPI FreeConsole(VOID);
BOOL WINAPI GenerateConsoleCtrlEvent(_In_ DWORD, _In_ DWORD);
UINT WINAPI GetConsoleCP(VOID);
BOOL WINAPI GetConsoleCursorInfo(_In_ HANDLE, _Out_ PCONSOLE_CURSOR_INFO);
-BOOL WINAPI GetConsoleMode(HANDLE,PDWORD);
+BOOL WINAPI GetConsoleMode(_In_ HANDLE, _Out_ PDWORD);
UINT WINAPI GetConsoleOutputCP(VOID);
-BOOL WINAPI GetConsoleScreenBufferInfo(_In_ HANDLE, _Out_ PCONSOLE_SCREEN_BUFFER_INFO);
+
+BOOL
+WINAPI
+GetConsoleScreenBufferInfo(
+ _In_ HANDLE,
+ _Out_ PCONSOLE_SCREEN_BUFFER_INFO);
+
+/* Undocumented, see http://blog.airesoft.co.uk/2012/10/things-ms-can-do-that-they-dont-tell-you-about-console-graphics/ */
+BOOL WINAPI InvalidateConsoleDIBits(_In_ HANDLE, _In_ PSMALL_RECT);
DWORD
WINAPI
_Out_writes_(nSize) LPWSTR lpConsoleTitle,
_In_ DWORD nSize);
+COORD
+WINAPI
+GetConsoleFontSize(
+ _In_ HANDLE hConsoleOutput,
+ _In_ DWORD nFont);
+
+BOOL
+WINAPI
+GetCurrentConsoleFont(
+ _In_ HANDLE hConsoleOutput,
+ _In_ BOOL bMaximumWindow,
+ _Out_ PCONSOLE_FONT_INFO lpConsoleCurrentFont);
+
#if (_WIN32_WINNT >= 0x0500)
+
HWND WINAPI GetConsoleWindow(VOID);
BOOL APIENTRY GetConsoleDisplayMode(_Out_ LPDWORD lpModeFlags);
-BOOL APIENTRY SetConsoleDisplayMode(_In_ HANDLE hConsoleOutput, _In_ DWORD dwFlags, _Out_opt_ PCOORD lpNewScreenBufferDimensions);
+
+BOOL
+APIENTRY
+SetConsoleDisplayMode(
+ _In_ HANDLE hConsoleOutput,
+ _In_ DWORD dwFlags,
+ _Out_opt_ PCOORD lpNewScreenBufferDimensions);
+
#endif
+
COORD WINAPI GetLargestConsoleWindowSize(_In_ HANDLE);
-BOOL WINAPI GetNumberOfConsoleInputEvents(HANDLE,PDWORD);
+BOOL WINAPI GetNumberOfConsoleInputEvents(_In_ HANDLE, _Out_ PDWORD);
BOOL WINAPI GetNumberOfConsoleMouseButtons(_Out_ PDWORD);
-BOOL WINAPI PeekConsoleInputA(HANDLE,PINPUT_RECORD,DWORD,PDWORD);
+
+BOOL
+WINAPI PeekConsoleInputA(
+ _In_ HANDLE hConsoleInput,
+ _Out_writes_(nLength) PINPUT_RECORD lpBuffer,
+ _In_ DWORD nLength,
+ _Out_ LPDWORD lpNumberOfEventsRead);
BOOL
WINAPI
_In_ DWORD nLength,
_Out_ LPDWORD lpNumberOfEventsRead);
-BOOL WINAPI ReadConsoleA(HANDLE,PVOID,DWORD,PDWORD,PCONSOLE_READCONSOLE_CONTROL);
-BOOL WINAPI ReadConsoleW(HANDLE,PVOID,DWORD,PDWORD,PCONSOLE_READCONSOLE_CONTROL);
-BOOL WINAPI ReadConsoleInputA(HANDLE,PINPUT_RECORD,DWORD,PDWORD);
-BOOL WINAPI ReadConsoleInputW(HANDLE,PINPUT_RECORD,DWORD,PDWORD);
+_Success_(return != 0)
+BOOL
+WINAPI
+ReadConsoleA(
+ _In_ HANDLE hConsoleInput,
+ _Out_writes_bytes_to_(nNumberOfCharsToRead * sizeof(CHAR), *lpNumberOfCharsRead * sizeof(CHAR)) LPVOID lpBuffer,
+ _In_ DWORD nNumberOfCharsToRead,
+ _Out_ _Deref_out_range_(<= , nNumberOfCharsToRead) LPDWORD lpNumberOfCharsRead,
+ _In_opt_ PCONSOLE_READCONSOLE_CONTROL pInputControl);
+
+_Success_(return != 0)
+BOOL
+WINAPI
+ReadConsoleW(
+ _In_ HANDLE hConsoleInput,
+ _Out_writes_bytes_to_(nNumberOfCharsToRead * sizeof(WCHAR), *lpNumberOfCharsRead * sizeof(WCHAR)) LPVOID lpBuffer,
+ _In_ DWORD nNumberOfCharsToRead,
+ _Out_ _Deref_out_range_(<= , nNumberOfCharsToRead) LPDWORD lpNumberOfCharsRead,
+ _In_opt_ PCONSOLE_READCONSOLE_CONTROL pInputControl);
+
+_Success_(return != 0)
+BOOL
+WINAPI
+ReadConsoleInputA(
+ _In_ HANDLE hConsoleInput,
+ _Out_writes_to_(nLength, *lpNumberOfEventsRead) PINPUT_RECORD lpBuffer,
+ _In_ DWORD nLength,
+ _Out_ _Deref_out_range_(<= , nLength) LPDWORD lpNumberOfEventsRead);
+
+_Success_(return != 0)
+BOOL
+WINAPI
+ReadConsoleInputW(
+ _In_ HANDLE hConsoleInput,
+ _Out_writes_to_(nLength, *lpNumberOfEventsRead) PINPUT_RECORD lpBuffer,
+ _In_ DWORD nLength,
+ _Out_ _Deref_out_range_(<= , nLength) LPDWORD lpNumberOfEventsRead);
BOOL
WINAPI
_In_ COORD dwBufferCoord,
_Inout_ PSMALL_RECT lpReadRegion);
-BOOL WINAPI ScrollConsoleScreenBufferA(_In_ HANDLE, _In_ const SMALL_RECT*, _In_opt_ const SMALL_RECT*, _In_ COORD, _In_ const CHAR_INFO*);
-BOOL WINAPI ScrollConsoleScreenBufferW(_In_ HANDLE, _In_ const SMALL_RECT*, _In_opt_ const SMALL_RECT*, _In_ COORD, _In_ const CHAR_INFO*);
+BOOL
+WINAPI
+ScrollConsoleScreenBufferA(
+ _In_ HANDLE,
+ _In_ const SMALL_RECT*,
+ _In_opt_ const SMALL_RECT*,
+ _In_ COORD,
+ _In_ const CHAR_INFO*);
+
+BOOL
+WINAPI
+ScrollConsoleScreenBufferW(
+ _In_ HANDLE,
+ _In_ const SMALL_RECT*,
+ _In_opt_ const SMALL_RECT*,
+ _In_ COORD,
+ _In_ const CHAR_INFO*);
+
BOOL WINAPI SetConsoleActiveScreenBuffer(_In_ HANDLE);
BOOL WINAPI SetConsoleCP(_In_ UINT);
-BOOL WINAPI SetConsoleCtrlHandler(PHANDLER_ROUTINE,BOOL);
+BOOL WINAPI SetConsoleCtrlHandler(_In_opt_ PHANDLER_ROUTINE, _In_ BOOL);
BOOL WINAPI SetConsoleCursorInfo(_In_ HANDLE, _In_ const CONSOLE_CURSOR_INFO*);
BOOL WINAPI SetConsoleCursorPosition(_In_ HANDLE, _In_ COORD);
-BOOL WINAPI SetConsoleMode(HANDLE,DWORD);
+BOOL WINAPI SetConsoleMode(_In_ HANDLE, _In_ DWORD);
BOOL WINAPI SetConsoleOutputCP(_In_ UINT);
BOOL WINAPI SetConsoleScreenBufferSize(_In_ HANDLE, _In_ COORD);
BOOL WINAPI SetConsoleTextAttribute(_In_ HANDLE, _In_ WORD);
BOOL WINAPI SetConsoleTitleA(_In_ LPCSTR);
BOOL WINAPI SetConsoleTitleW(_In_ LPCWSTR);
-BOOL WINAPI SetConsoleWindowInfo(_In_ HANDLE, _In_ BOOL, _In_ const SMALL_RECT*);
-BOOL WINAPI WriteConsoleA(HANDLE,CONST VOID*,DWORD,LPDWORD,LPVOID);
-BOOL WINAPI WriteConsoleW(HANDLE,CONST VOID*,DWORD,LPDWORD,LPVOID);
+
+BOOL
+WINAPI
+SetConsoleWindowInfo(
+ _In_ HANDLE,
+ _In_ BOOL,
+ _In_ const SMALL_RECT*);
+
+/* Undocumented, see http://undoc.airesoft.co.uk/kernel32.dll/ConsoleMenuControl.php */
+HMENU WINAPI ConsoleMenuControl(_In_ HANDLE, _In_ DWORD, _In_ DWORD);
+/* Undocumented */
+BOOL WINAPI SetConsoleMenuClose(_In_ BOOL);
+/* Undocumented, see http://undoc.airesoft.co.uk/kernel32.dll/SetConsoleCursor.php */
+BOOL WINAPI SetConsoleCursor(_In_ HANDLE, _In_ HCURSOR);
+/* Undocumented, see http://undoc.airesoft.co.uk/kernel32.dll/ShowConsoleCursor.php */
+INT WINAPI ShowConsoleCursor(_In_ HANDLE, _In_ BOOL);
+/* Undocumented, see http://comments.gmane.org/gmane.comp.lang.harbour.devel/27844 */
+BOOL WINAPI SetConsolePalette(_In_ HANDLE, _In_ HPALETTE, _In_ UINT);
+
+BOOL
+WINAPI
+WriteConsoleA(
+ _In_ HANDLE hConsoleOutput,
+ _In_reads_(nNumberOfCharsToWrite) CONST VOID *lpBuffer,
+ _In_ DWORD nNumberOfCharsToWrite,
+ _Out_opt_ LPDWORD lpNumberOfCharsWritten,
+ _Reserved_ LPVOID lpReserved);
+
+BOOL
+WINAPI
+WriteConsoleW(
+ _In_ HANDLE hConsoleOutput,
+ _In_reads_(nNumberOfCharsToWrite) CONST VOID *lpBuffer,
+ _In_ DWORD nNumberOfCharsToWrite,
+ _Out_opt_ LPDWORD lpNumberOfCharsWritten,
+ _Reserved_ LPVOID lpReserved);
BOOL
WINAPI
_In_ DWORD nLength,
_Out_ LPDWORD lpNumberOfEventsWritten);
+BOOL
+WINAPI
+WriteConsoleInputVDMA(
+ _In_ HANDLE hConsoleInput,
+ _In_reads_(nLength) CONST INPUT_RECORD *lpBuffer,
+ _In_ DWORD nLength,
+ _Out_ LPDWORD lpNumberOfEventsWritten);
+
+BOOL
+WINAPI
+WriteConsoleInputVDMW(
+ _In_ HANDLE hConsoleInput,
+ _In_reads_(nLength) CONST INPUT_RECORD *lpBuffer,
+ _In_ DWORD nLength,
+ _Out_ LPDWORD lpNumberOfEventsWritten);
+
BOOL
WINAPI
WriteConsoleOutputA(
#define SetConsoleTitle SetConsoleTitleW
#define WriteConsole WriteConsoleW
#define WriteConsoleInput WriteConsoleInputW
+#define WriteConsoleInputVDM WriteConsoleInputVDMW
#define WriteConsoleOutput WriteConsoleOutputW
#define FillConsoleOutputCharacter FillConsoleOutputCharacterW
#define WriteConsoleOutputCharacter WriteConsoleOutputCharacterW
#define SetConsoleTitle SetConsoleTitleA
#define WriteConsole WriteConsoleA
#define WriteConsoleInput WriteConsoleInputA
+#define WriteConsoleInputVDM WriteConsoleInputVDMA
#define WriteConsoleOutput WriteConsoleOutputA
#define FillConsoleOutputCharacter FillConsoleOutputCharacterA
#define WriteConsoleOutputCharacter WriteConsoleOutputCharacterA
#ifdef __cplusplus
}
#endif
-#endif
+
+#endif /* _WINCON_H */