You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
156 lines
4.0 KiB
156 lines
4.0 KiB
from ctypes import Union, Structure, c_char, c_short, c_long, c_ulong
|
|
from ctypes.wintypes import DWORD, BOOL, LPVOID, WORD, WCHAR
|
|
|
|
|
|
# Input/Output standard device numbers. Note that these are not handle objects.
|
|
# It's the `windll.kernel32.GetStdHandle` system call that turns them into a
|
|
# real handle object.
|
|
STD_INPUT_HANDLE = c_ulong(-10)
|
|
STD_OUTPUT_HANDLE = c_ulong(-11)
|
|
STD_ERROR_HANDLE = c_ulong(-12)
|
|
|
|
|
|
class COORD(Structure):
|
|
"""
|
|
Struct in wincon.h
|
|
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682119(v=vs.85).aspx
|
|
"""
|
|
_fields_ = [
|
|
('X', c_short), # Short
|
|
('Y', c_short), # Short
|
|
]
|
|
|
|
def __repr__(self):
|
|
return '%s(X=%r, Y=%r, type_x=%r, type_y=%r)' % (
|
|
self.__class__.__name__, self.X, self.Y, type(self.X), type(self.Y))
|
|
|
|
|
|
class UNICODE_OR_ASCII(Union):
|
|
_fields_ = [
|
|
('AsciiChar', c_char),
|
|
('UnicodeChar', WCHAR),
|
|
]
|
|
|
|
|
|
class KEY_EVENT_RECORD(Structure):
|
|
"""
|
|
http://msdn.microsoft.com/en-us/library/windows/desktop/ms684166(v=vs.85).aspx
|
|
"""
|
|
_fields_ = [
|
|
('KeyDown', c_long), # bool
|
|
('RepeatCount', c_short), # word
|
|
('VirtualKeyCode', c_short), # word
|
|
('VirtualScanCode', c_short), # word
|
|
('uChar', UNICODE_OR_ASCII), # Unicode or ASCII.
|
|
('ControlKeyState', c_long) # double word
|
|
]
|
|
|
|
|
|
class MOUSE_EVENT_RECORD(Structure):
|
|
"""
|
|
http://msdn.microsoft.com/en-us/library/windows/desktop/ms684239(v=vs.85).aspx
|
|
"""
|
|
_fields_ = [
|
|
('MousePosition', COORD),
|
|
('ButtonState', c_long), # dword
|
|
('ControlKeyState', c_long), # dword
|
|
('EventFlags', c_long) # dword
|
|
]
|
|
|
|
|
|
class WINDOW_BUFFER_SIZE_RECORD(Structure):
|
|
"""
|
|
http://msdn.microsoft.com/en-us/library/windows/desktop/ms687093(v=vs.85).aspx
|
|
"""
|
|
_fields_ = [
|
|
('Size', COORD)
|
|
]
|
|
|
|
|
|
class MENU_EVENT_RECORD(Structure):
|
|
"""
|
|
http://msdn.microsoft.com/en-us/library/windows/desktop/ms684213(v=vs.85).aspx
|
|
"""
|
|
_fields_ = [
|
|
('CommandId', c_long) # uint
|
|
]
|
|
|
|
|
|
class FOCUS_EVENT_RECORD(Structure):
|
|
"""
|
|
http://msdn.microsoft.com/en-us/library/windows/desktop/ms683149(v=vs.85).aspx
|
|
"""
|
|
_fields_ = [
|
|
('SetFocus', c_long) # bool
|
|
]
|
|
|
|
|
|
class EVENT_RECORD(Union):
|
|
_fields_ = [
|
|
('KeyEvent', KEY_EVENT_RECORD),
|
|
('MouseEvent', MOUSE_EVENT_RECORD),
|
|
('WindowBufferSizeEvent', WINDOW_BUFFER_SIZE_RECORD),
|
|
('MenuEvent', MENU_EVENT_RECORD),
|
|
('FocusEvent', FOCUS_EVENT_RECORD)
|
|
]
|
|
|
|
|
|
class INPUT_RECORD(Structure):
|
|
"""
|
|
http://msdn.microsoft.com/en-us/library/windows/desktop/ms683499(v=vs.85).aspx
|
|
"""
|
|
_fields_ = [
|
|
('EventType', c_short), # word
|
|
('Event', EVENT_RECORD) # Union.
|
|
]
|
|
|
|
|
|
EventTypes = {
|
|
1: 'KeyEvent',
|
|
2: 'MouseEvent',
|
|
4: 'WindowBufferSizeEvent',
|
|
8: 'MenuEvent',
|
|
16: 'FocusEvent'
|
|
}
|
|
|
|
|
|
class SMALL_RECT(Structure):
|
|
"""struct in wincon.h."""
|
|
_fields_ = [
|
|
("Left", c_short),
|
|
("Top", c_short),
|
|
("Right", c_short),
|
|
("Bottom", c_short),
|
|
]
|
|
|
|
|
|
class CONSOLE_SCREEN_BUFFER_INFO(Structure):
|
|
"""struct in wincon.h."""
|
|
_fields_ = [
|
|
("dwSize", COORD),
|
|
("dwCursorPosition", COORD),
|
|
("wAttributes", WORD),
|
|
("srWindow", SMALL_RECT),
|
|
("dwMaximumWindowSize", COORD),
|
|
]
|
|
|
|
def __str__(self):
|
|
return '(%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d)' % (
|
|
self.dwSize.Y, self.dwSize.X,
|
|
self.dwCursorPosition.Y, self.dwCursorPosition.X,
|
|
self.wAttributes,
|
|
self.srWindow.Top, self.srWindow.Left, self.srWindow.Bottom, self.srWindow.Right,
|
|
self.dwMaximumWindowSize.Y, self.dwMaximumWindowSize.X,
|
|
)
|
|
|
|
|
|
class SECURITY_ATTRIBUTES(Structure):
|
|
"""
|
|
http://msdn.microsoft.com/en-us/library/windows/desktop/aa379560(v=vs.85).aspx
|
|
"""
|
|
_fields_ = [
|
|
('nLength', DWORD),
|
|
('lpSecurityDescriptor', LPVOID),
|
|
('bInheritHandle', BOOL),
|
|
]
|