125 lines
5.7 KiB
Plaintext
125 lines
5.7 KiB
Plaintext
from stdint import *
|
||
from win32.win32base import HANDLE, LPCSTR, LPCWSTR
|
||
|
||
|
||
define ENABLE_PROCESSED_INPUT = 0x0001
|
||
define ENABLE_LINE_INPUT = 0x0002
|
||
define ENABLE_ECHO_INPUT = 0x0004
|
||
define ENABLE_WINDOW_INPUT = 0x0008
|
||
define ENABLE_MOUSE_INPUT = 0x0010
|
||
define ENABLE_INSERT_MODE = 0x0020
|
||
define ENABLE_QUICK_EDIT_MODE = 0x0040
|
||
define ENABLE_EXTENDED_FLAGS = 0x0080
|
||
|
||
define ENABLE_PROCESSED_OUTPUT = 0x0001
|
||
define ENABLE_WRAP_AT_EOL_OUTPUT = 0x0002
|
||
define ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x0004
|
||
define DISABLE_NEWLINE_AUTO_RETURN = 0x0008
|
||
define ENABLE_LVB_GRID_WORLDWIDE = 0x0010
|
||
|
||
# 颜色属性用 WORD(...) 显式定宽 uint16(SetConsoleTextAttribute 的 wAttributes: WORD)。
|
||
# `define X = <i32 字面量>` 是 i32,直接传给 WORD 形参会触发 32→16 隐式窄化。
|
||
define FOREGROUND_BLUE = WORD(0x0001)
|
||
define FOREGROUND_GREEN = WORD(0x0002)
|
||
define FOREGROUND_RED = WORD(0x0004)
|
||
define FOREGROUND_INTENSITY = WORD(0x0008)
|
||
define BACKGROUND_BLUE = WORD(0x0010)
|
||
define BACKGROUND_GREEN = WORD(0x0020)
|
||
define BACKGROUND_RED = WORD(0x0040)
|
||
define BACKGROUND_INTENSITY = WORD(0x0080)
|
||
|
||
define KEY_EVENT = 0x0001
|
||
define MOUSE_EVENT = 0x0002
|
||
define WINDOW_BUFFER_SIZE_EVENT = 0x0004
|
||
define MENU_EVENT = 0x0008
|
||
define FOCUS_EVENT = 0x0010
|
||
|
||
# Control event types (dwCtrlType arg of the SetConsoleCtrlHandler routine; consoleapi.h)
|
||
define CTRL_C_EVENT = 0# Ctrl+C
|
||
define CTRL_BREAK_EVENT = 1# Ctrl+Break
|
||
define CTRL_CLOSE_EVENT = 2# console window closed
|
||
define CTRL_LOGOFF_EVENT = 5# user logoff
|
||
define CTRL_SHUTDOWN_EVENT = 6# system shutdown
|
||
|
||
struct COORD:
|
||
X: SHORT
|
||
Y: SHORT
|
||
|
||
struct SMALL_RECT:
|
||
Left: SHORT
|
||
Top: SHORT
|
||
Right: SHORT
|
||
Bottom: SHORT
|
||
|
||
struct CONSOLE_SCREEN_BUFFER_INFO:
|
||
dwSize: COORD
|
||
dwCursorPosition: COORD
|
||
wAttributes: WORD
|
||
srWindow: SMALL_RECT
|
||
dwMaximumWindowSize: COORD
|
||
|
||
struct CONSOLE_CURSOR_INFO:
|
||
dwSize: DWORD
|
||
bVisible: BOOL
|
||
|
||
struct CHAR_INFO:
|
||
UnicodeChar: WCHAR
|
||
Attributes: WORD
|
||
|
||
struct KEY_EVENT_RECORD:
|
||
bKeyDown: BOOL
|
||
wRepeatCount: WORD
|
||
wVirtualKeyCode: WORD
|
||
wVirtualScanCode: WORD
|
||
uChar: WCHAR
|
||
dwControlKeyState: DWORD
|
||
|
||
struct MOUSE_EVENT_RECORD:
|
||
dwMousePosition: COORD
|
||
dwButtonState: DWORD
|
||
dwControlKeyState: DWORD
|
||
dwEventFlags: DWORD
|
||
|
||
struct WINDOW_BUFFER_SIZE_RECORD:
|
||
dwSize: COORD
|
||
|
||
struct INPUT_RECORD:
|
||
EventType: WORD
|
||
Event: KEY_EVENT_RECORD
|
||
|
||
extern def SetConsoleOutputCP(codepage: UINT) -> BOOL
|
||
extern def SetConsoleCP(codepage: UINT) -> BOOL
|
||
extern def GetConsoleCP() -> UINT
|
||
extern def GetConsoleOutputCP() -> UINT
|
||
extern def GetConsoleScreenBufferInfo(hConsoleOutput: HANDLE, lpConsoleScreenBufferInfo: CONSOLE_SCREEN_BUFFER_INFO*) -> BOOL
|
||
extern def SetConsoleScreenBufferSize(hConsoleOutput: HANDLE, dwSize: COORD) -> BOOL
|
||
extern def SetConsoleCursorPosition(hConsoleOutput: HANDLE, dwCursorPosition: COORD) -> BOOL
|
||
extern def GetConsoleCursorInfo(hConsoleOutput: HANDLE, lpConsoleCursorInfo: CONSOLE_CURSOR_INFO*) -> BOOL
|
||
extern def SetConsoleCursorInfo(hConsoleOutput: HANDLE, lpConsoleCursorInfo: CONSOLE_CURSOR_INFO*) -> BOOL
|
||
extern def SetConsoleTextAttribute(hConsoleOutput: HANDLE, wAttributes: WORD) -> BOOL
|
||
extern def FillConsoleOutputCharacterA(hConsoleOutput: HANDLE, cCharacter: char, nLength: ULONG, dwWriteCoord: COORD, lpNumberOfCharsWritten: ULONG*) -> BOOL
|
||
extern def FillConsoleOutputCharacterW(hConsoleOutput: HANDLE, cCharacter: WCHAR, nLength: ULONG, dwWriteCoord: COORD, lpNumberOfCharsWritten: ULONG*) -> BOOL
|
||
extern def FillConsoleOutputAttribute(hConsoleOutput: HANDLE, wAttribute: WORD, nLength: ULONG, dwWriteCoord: COORD, lpNumberOfAttrsWritten: ULONG*) -> BOOL
|
||
extern def WriteConsoleA(hConsoleOutput: HANDLE, lpBuffer: const VOIDPTR, nNumberOfCharsToWrite: ULONG, lpNumberOfCharsWritten: ULONG*, lpReserved: VOIDPTR) -> BOOL
|
||
extern def WriteConsoleW(hConsoleOutput: HANDLE, lpBuffer: const VOIDPTR, nNumberOfCharsToWrite: ULONG, lpNumberOfCharsWritten: ULONG*, lpReserved: VOIDPTR) -> BOOL
|
||
extern def ReadConsoleA(hConsoleInput: HANDLE, lpBuffer: VOIDPTR, nNumberOfCharsToRead: ULONG, lpNumberOfCharsRead: ULONG*, pInputControl: VOIDPTR) -> BOOL
|
||
extern def ReadConsoleW(hConsoleInput: HANDLE, lpBuffer: VOIDPTR, nNumberOfCharsToRead: ULONG, lpNumberOfCharsRead: ULONG*, pInputControl: VOIDPTR) -> BOOL
|
||
extern def GetConsoleMode(hConsoleHandle: HANDLE, lpMode: ULONG*) -> BOOL
|
||
extern def SetConsoleMode(hConsoleHandle: HANDLE, dwMode: ULONG) -> BOOL
|
||
extern def ReadConsoleInputA(hConsoleInput: HANDLE, lpBuffer: INPUT_RECORD*, nLength: ULONG, lpNumberOfEventsRead: ULONG*) -> BOOL
|
||
extern def ReadConsoleInputW(hConsoleInput: HANDLE, lpBuffer: INPUT_RECORD*, nLength: ULONG, lpNumberOfEventsRead: ULONG*) -> BOOL
|
||
extern def GetNumberOfConsoleInputEvents(hConsoleInput: HANDLE, lpNumberOfEvents: ULONG*) -> BOOL
|
||
extern def FlushConsoleInputBuffer(hConsoleInput: HANDLE) -> BOOL
|
||
extern def SetConsoleTitleA(lpConsoleTitle: LPCSTR) -> BOOL
|
||
extern def SetConsoleTitleW(lpConsoleTitle: LPCWSTR) -> BOOL
|
||
extern def GetConsoleTitleA(lpConsoleTitle: CHARPTR, nSize: ULONG) -> ULONG
|
||
extern def GetConsoleTitleW(lpConsoleTitle: WCHARPTR, nSize: ULONG) -> ULONG
|
||
extern def AllocConsole() -> BOOL
|
||
extern def FreeConsole() -> BOOL
|
||
extern def SetConsoleWindowInfo(hConsoleOutput: HANDLE, bAbsolute: BOOL, lpConsoleWindow: SMALL_RECT*) -> BOOL
|
||
extern def ScrollConsoleScreenBufferA(hConsoleOutput: HANDLE, lpScrollRectangle: SMALL_RECT*, lpClipRectangle: SMALL_RECT*, dwDestinationOrigin: COORD, lpFill: CHAR_INFO*) -> BOOL
|
||
|
||
# SetConsoleCtrlHandler registration/removal (consoleapi.h / kernel32.dll): pass the routine name directly, bitcast by VPC (function pointers declared as rawptr).
|
||
# Returns 0 on failure (see GetLastError); Add=FALSE removes the registered routine.
|
||
extern def SetConsoleCtrlHandler(HandlerRoutine: rawptr, Add: BOOL) -> BOOL
|