--- /dev/null
+from ctypes import (
+ Array,
+ Structure,
+ _SimpleCData,
+ c_byte,
+ c_char,
+ c_char_p,
+ c_double,
+ c_float,
+ c_int,
+ c_long,
+ c_longlong,
+ c_short,
+ c_uint,
+ c_ulong,
+ c_ulonglong,
+ c_ushort,
+ c_void_p,
+ c_wchar,
+ c_wchar_p,
+ pointer,
+)
+
+BYTE = c_byte
+WORD = c_ushort
+DWORD = c_ulong
+CHAR = c_char
+WCHAR = c_wchar
+UINT = c_uint
+INT = c_int
+DOUBLE = c_double
+FLOAT = c_float
+BOOLEAN = BYTE
+BOOL = c_long
+
+class VARIANT_BOOL(_SimpleCData[bool]): ...
+
+ULONG = c_ulong
+LONG = c_long
+USHORT = c_ushort
+SHORT = c_short
+LARGE_INTEGER = c_longlong
+_LARGE_INTEGER = c_longlong
+ULARGE_INTEGER = c_ulonglong
+_ULARGE_INTEGER = c_ulonglong
+
+OLESTR = c_wchar_p
+LPOLESTR = c_wchar_p
+LPCOLESTR = c_wchar_p
+LPWSTR = c_wchar_p
+LPCWSTR = c_wchar_p
+LPSTR = c_char_p
+LPCSTR = c_char_p
+LPVOID = c_void_p
+LPCVOID = c_void_p
+
+# These two types are pointer-sized unsigned and signed ints, respectively.
+# At runtime, they are either c_[u]long or c_[u]longlong, depending on the host's pointer size
+# (they are not really separate classes).
+class WPARAM(_SimpleCData[int]): ...
+class LPARAM(_SimpleCData[int]): ...
+
+ATOM = WORD
+LANGID = WORD
+COLORREF = DWORD
+LGRPID = DWORD
+LCTYPE = DWORD
+LCID = DWORD
+
+HANDLE = c_void_p
+HACCEL = HANDLE
+HBITMAP = HANDLE
+HBRUSH = HANDLE
+HCOLORSPACE = HANDLE
+HDC = HANDLE
+HDESK = HANDLE
+HDWP = HANDLE
+HENHMETAFILE = HANDLE
+HFONT = HANDLE
+HGDIOBJ = HANDLE
+HGLOBAL = HANDLE
+HHOOK = HANDLE
+HICON = HANDLE
+HINSTANCE = HANDLE
+HKEY = HANDLE
+HKL = HANDLE
+HLOCAL = HANDLE
+HMENU = HANDLE
+HMETAFILE = HANDLE
+HMODULE = HANDLE
+HMONITOR = HANDLE
+HPALETTE = HANDLE
+HPEN = HANDLE
+HRGN = HANDLE
+HRSRC = HANDLE
+HSTR = HANDLE
+HTASK = HANDLE
+HWINSTA = HANDLE
+HWND = HANDLE
+SC_HANDLE = HANDLE
+SERVICE_STATUS_HANDLE = HANDLE
+
+class RECT(Structure):
+ left: LONG
+ top: LONG
+ right: LONG
+ bottom: LONG
+
+RECTL = RECT
+_RECTL = RECT
+tagRECT = RECT
+
+class _SMALL_RECT(Structure):
+ Left: SHORT
+ Top: SHORT
+ Right: SHORT
+ Bottom: SHORT
+
+SMALL_RECT = _SMALL_RECT
+
+class _COORD(Structure):
+ X: SHORT
+ Y: SHORT
+
+class POINT(Structure):
+ x: LONG
+ y: LONG
+
+POINTL = POINT
+_POINTL = POINT
+tagPOINT = POINT
+
+class SIZE(Structure):
+ cx: LONG
+ cy: LONG
+
+SIZEL = SIZE
+tagSIZE = SIZE
+
+def RGB(red: int, green: int, blue: int) -> int: ...
+
+class FILETIME(Structure):
+ dwLowDateTime: DWORD
+ dwHighDateTime: DWORD
+
+_FILETIME = FILETIME
+
+class MSG(Structure):
+ hWnd: HWND
+ message: UINT
+ wParam: WPARAM
+ lParam: LPARAM
+ time: DWORD
+ pt: POINT
+
+tagMSG = MSG
+MAX_PATH: int
+
+class WIN32_FIND_DATAA(Structure):
+ dwFileAttributes: DWORD
+ ftCreationTime: FILETIME
+ ftLastAccessTime: FILETIME
+ ftLastWriteTime: FILETIME
+ nFileSizeHigh: DWORD
+ nFileSizeLow: DWORD
+ dwReserved0: DWORD
+ dwReserved1: DWORD
+ cFileName: Array[CHAR]
+ cAlternateFileName: Array[CHAR]
+
+class WIN32_FIND_DATAW(Structure):
+ dwFileAttributes: DWORD
+ ftCreationTime: FILETIME
+ ftLastAccessTime: FILETIME
+ ftLastWriteTime: FILETIME
+ nFileSizeHigh: DWORD
+ nFileSizeLow: DWORD
+ dwReserved0: DWORD
+ dwReserved1: DWORD
+ cFileName: Array[WCHAR]
+ cAlternateFileName: Array[WCHAR]
+
+# These pointer type definitions use pointer[...] instead of POINTER(...), to allow them
+# to be used in type annotations.
+PBOOL = pointer[BOOL]
+LPBOOL = pointer[BOOL]
+PBOOLEAN = pointer[BOOLEAN]
+PBYTE = pointer[BYTE]
+LPBYTE = pointer[BYTE]
+PCHAR = pointer[CHAR]
+LPCOLORREF = pointer[COLORREF]
+PDWORD = pointer[DWORD]
+LPDWORD = pointer[DWORD]
+PFILETIME = pointer[FILETIME]
+LPFILETIME = pointer[FILETIME]
+PFLOAT = pointer[FLOAT]
+PHANDLE = pointer[HANDLE]
+LPHANDLE = pointer[HANDLE]
+PHKEY = pointer[HKEY]
+LPHKL = pointer[HKL]
+PINT = pointer[INT]
+LPINT = pointer[INT]
+PLARGE_INTEGER = pointer[LARGE_INTEGER]
+PLCID = pointer[LCID]
+PLONG = pointer[LONG]
+LPLONG = pointer[LONG]
+PMSG = pointer[MSG]
+LPMSG = pointer[MSG]
+PPOINT = pointer[POINT]
+LPPOINT = pointer[POINT]
+PPOINTL = pointer[POINTL]
+PRECT = pointer[RECT]
+LPRECT = pointer[RECT]
+PRECTL = pointer[RECTL]
+LPRECTL = pointer[RECTL]
+LPSC_HANDLE = pointer[SC_HANDLE]
+PSHORT = pointer[SHORT]
+PSIZE = pointer[SIZE]
+LPSIZE = pointer[SIZE]
+PSIZEL = pointer[SIZEL]
+LPSIZEL = pointer[SIZEL]
+PSMALL_RECT = pointer[SMALL_RECT]
+PUINT = pointer[UINT]
+LPUINT = pointer[UINT]
+PULARGE_INTEGER = pointer[ULARGE_INTEGER]
+PULONG = pointer[ULONG]
+PUSHORT = pointer[USHORT]
+PWCHAR = pointer[WCHAR]
+PWIN32_FIND_DATAA = pointer[WIN32_FIND_DATAA]
+LPWIN32_FIND_DATAA = pointer[WIN32_FIND_DATAA]
+PWIN32_FIND_DATAW = pointer[WIN32_FIND_DATAW]
+LPWIN32_FIND_DATAW = pointer[WIN32_FIND_DATAW]
+PWORD = pointer[WORD]
+LPWORD = pointer[WORD]