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