blob: c619d27596d40b6c396fe23bea33d7187d1d6568 [file] [log] [blame]
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001# The most useful windows datatypes
Hirokazu Yamamotocc868d42010-09-28 21:08:38 +00002import ctypes
Thomas Hellerbabddfc2006-03-08 19:56:54 +00003
Hirokazu Yamamotocc868d42010-09-28 21:08:38 +00004BYTE = ctypes.c_byte
5WORD = ctypes.c_ushort
6DWORD = ctypes.c_ulong
Thomas Wouters0e3f5912006-08-11 14:57:12 +00007
Hirokazu Yamamotocc868d42010-09-28 21:08:38 +00008#UCHAR = ctypes.c_uchar
9CHAR = ctypes.c_char
10WCHAR = ctypes.c_wchar
11UINT = ctypes.c_uint
12INT = ctypes.c_int
Thomas Wouters0e3f5912006-08-11 14:57:12 +000013
Hirokazu Yamamotocc868d42010-09-28 21:08:38 +000014DOUBLE = ctypes.c_double
15FLOAT = ctypes.c_float
Thomas Wouters0e3f5912006-08-11 14:57:12 +000016
17BOOLEAN = BYTE
Hirokazu Yamamotocc868d42010-09-28 21:08:38 +000018BOOL = ctypes.c_long
Thomas Wouters0e3f5912006-08-11 14:57:12 +000019
Hirokazu Yamamotocc868d42010-09-28 21:08:38 +000020class VARIANT_BOOL(ctypes._SimpleCData):
Thomas Wouters0e3f5912006-08-11 14:57:12 +000021 _type_ = "v"
22 def __repr__(self):
23 return "%s(%r)" % (self.__class__.__name__, self.value)
Thomas Hellerbabddfc2006-03-08 19:56:54 +000024
Hirokazu Yamamotocc868d42010-09-28 21:08:38 +000025ULONG = ctypes.c_ulong
26LONG = ctypes.c_long
Thomas Hellerbabddfc2006-03-08 19:56:54 +000027
Hirokazu Yamamotocc868d42010-09-28 21:08:38 +000028USHORT = ctypes.c_ushort
29SHORT = ctypes.c_short
Hirokazu Yamamotoc4523622008-08-20 13:42:16 +000030
Thomas Wouters0e3f5912006-08-11 14:57:12 +000031# in the windows header files, these are structures.
Hirokazu Yamamotocc868d42010-09-28 21:08:38 +000032_LARGE_INTEGER = LARGE_INTEGER = ctypes.c_longlong
33_ULARGE_INTEGER = ULARGE_INTEGER = ctypes.c_ulonglong
Thomas Hellerbabddfc2006-03-08 19:56:54 +000034
Hirokazu Yamamotocc868d42010-09-28 21:08:38 +000035LPCOLESTR = LPOLESTR = OLESTR = ctypes.c_wchar_p
36LPCWSTR = LPWSTR = ctypes.c_wchar_p
37LPCSTR = LPSTR = ctypes.c_char_p
38LPCVOID = LPVOID = ctypes.c_void_p
Thomas Hellerbabddfc2006-03-08 19:56:54 +000039
Thomas Woutersfc7bb8c2007-01-15 15:49:28 +000040# WPARAM is defined as UINT_PTR (unsigned type)
41# LPARAM is defined as LONG_PTR (signed type)
Hirokazu Yamamotocc868d42010-09-28 21:08:38 +000042if ctypes.sizeof(ctypes.c_long) == ctypes.sizeof(ctypes.c_void_p):
43 WPARAM = ctypes.c_ulong
44 LPARAM = ctypes.c_long
45elif ctypes.sizeof(ctypes.c_longlong) == ctypes.sizeof(ctypes.c_void_p):
46 WPARAM = ctypes.c_ulonglong
47 LPARAM = ctypes.c_longlong
Thomas Hellerbabddfc2006-03-08 19:56:54 +000048
Thomas Wouters0e3f5912006-08-11 14:57:12 +000049ATOM = WORD
50LANGID = WORD
Thomas Hellerbabddfc2006-03-08 19:56:54 +000051
Thomas Wouters0e3f5912006-08-11 14:57:12 +000052COLORREF = DWORD
53LGRPID = DWORD
54LCTYPE = DWORD
Thomas Hellerbabddfc2006-03-08 19:56:54 +000055
Thomas Wouters0e3f5912006-08-11 14:57:12 +000056LCID = DWORD
57
58################################################################
59# HANDLE types
Hirokazu Yamamotocc868d42010-09-28 21:08:38 +000060HANDLE = ctypes.c_void_p # in the header files: void *
Thomas Wouters0e3f5912006-08-11 14:57:12 +000061
62HACCEL = HANDLE
63HBITMAP = HANDLE
64HBRUSH = HANDLE
65HCOLORSPACE = HANDLE
66HDC = HANDLE
67HDESK = HANDLE
68HDWP = HANDLE
69HENHMETAFILE = HANDLE
70HFONT = HANDLE
71HGDIOBJ = HANDLE
72HGLOBAL = HANDLE
73HHOOK = HANDLE
74HICON = HANDLE
75HINSTANCE = HANDLE
76HKEY = HANDLE
77HKL = HANDLE
78HLOCAL = HANDLE
79HMENU = HANDLE
80HMETAFILE = HANDLE
81HMODULE = HANDLE
82HMONITOR = HANDLE
83HPALETTE = HANDLE
84HPEN = HANDLE
85HRGN = HANDLE
86HRSRC = HANDLE
87HSTR = HANDLE
88HTASK = HANDLE
89HWINSTA = HANDLE
90HWND = HANDLE
91SC_HANDLE = HANDLE
92SERVICE_STATUS_HANDLE = HANDLE
93
94################################################################
95# Some important structure definitions
Thomas Hellerbabddfc2006-03-08 19:56:54 +000096
Hirokazu Yamamotocc868d42010-09-28 21:08:38 +000097class RECT(ctypes.Structure):
98 _fields_ = [("left", LONG),
99 ("top", LONG),
100 ("right", LONG),
101 ("bottom", LONG)]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000102tagRECT = _RECTL = RECTL = RECT
103
Hirokazu Yamamotocc868d42010-09-28 21:08:38 +0000104class _SMALL_RECT(ctypes.Structure):
105 _fields_ = [('Left', SHORT),
106 ('Top', SHORT),
107 ('Right', SHORT),
108 ('Bottom', SHORT)]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000109SMALL_RECT = _SMALL_RECT
110
Hirokazu Yamamotocc868d42010-09-28 21:08:38 +0000111class _COORD(ctypes.Structure):
112 _fields_ = [('X', SHORT),
113 ('Y', SHORT)]
Thomas Hellerbabddfc2006-03-08 19:56:54 +0000114
Hirokazu Yamamotocc868d42010-09-28 21:08:38 +0000115class POINT(ctypes.Structure):
116 _fields_ = [("x", LONG),
117 ("y", LONG)]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000118tagPOINT = _POINTL = POINTL = POINT
Thomas Hellerbabddfc2006-03-08 19:56:54 +0000119
Hirokazu Yamamotocc868d42010-09-28 21:08:38 +0000120class SIZE(ctypes.Structure):
121 _fields_ = [("cx", LONG),
122 ("cy", LONG)]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000123tagSIZE = SIZEL = SIZE
Thomas Hellerbabddfc2006-03-08 19:56:54 +0000124
125def RGB(red, green, blue):
126 return red + (green << 8) + (blue << 16)
127
Hirokazu Yamamotocc868d42010-09-28 21:08:38 +0000128class FILETIME(ctypes.Structure):
Thomas Hellerbabddfc2006-03-08 19:56:54 +0000129 _fields_ = [("dwLowDateTime", DWORD),
130 ("dwHighDateTime", DWORD)]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000131_FILETIME = FILETIME
Thomas Hellerbabddfc2006-03-08 19:56:54 +0000132
Hirokazu Yamamotocc868d42010-09-28 21:08:38 +0000133class MSG(ctypes.Structure):
Thomas Hellerbabddfc2006-03-08 19:56:54 +0000134 _fields_ = [("hWnd", HWND),
Hirokazu Yamamotocc868d42010-09-28 21:08:38 +0000135 ("message", UINT),
Thomas Hellerbabddfc2006-03-08 19:56:54 +0000136 ("wParam", WPARAM),
137 ("lParam", LPARAM),
138 ("time", DWORD),
139 ("pt", POINT)]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000140tagMSG = MSG
Thomas Hellerbabddfc2006-03-08 19:56:54 +0000141MAX_PATH = 260
142
Hirokazu Yamamotocc868d42010-09-28 21:08:38 +0000143class WIN32_FIND_DATAA(ctypes.Structure):
Thomas Hellerbabddfc2006-03-08 19:56:54 +0000144 _fields_ = [("dwFileAttributes", DWORD),
145 ("ftCreationTime", FILETIME),
146 ("ftLastAccessTime", FILETIME),
147 ("ftLastWriteTime", FILETIME),
148 ("nFileSizeHigh", DWORD),
149 ("nFileSizeLow", DWORD),
150 ("dwReserved0", DWORD),
151 ("dwReserved1", DWORD),
Hirokazu Yamamotocc868d42010-09-28 21:08:38 +0000152 ("cFileName", CHAR * MAX_PATH),
153 ("cAlternateFileName", CHAR * 14)]
Thomas Hellerbabddfc2006-03-08 19:56:54 +0000154
Hirokazu Yamamotocc868d42010-09-28 21:08:38 +0000155class WIN32_FIND_DATAW(ctypes.Structure):
Thomas Hellerbabddfc2006-03-08 19:56:54 +0000156 _fields_ = [("dwFileAttributes", DWORD),
157 ("ftCreationTime", FILETIME),
158 ("ftLastAccessTime", FILETIME),
159 ("ftLastWriteTime", FILETIME),
160 ("nFileSizeHigh", DWORD),
161 ("nFileSizeLow", DWORD),
162 ("dwReserved0", DWORD),
163 ("dwReserved1", DWORD),
Hirokazu Yamamotocc868d42010-09-28 21:08:38 +0000164 ("cFileName", WCHAR * MAX_PATH),
165 ("cAlternateFileName", WCHAR * 14)]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000166
Hirokazu Yamamotocc868d42010-09-28 21:08:38 +0000167################################################################
168# Pointer types
169
170LPBOOL = PBOOL = ctypes.POINTER(BOOL)
171PBOOLEAN = ctypes.POINTER(BOOLEAN)
172LPBYTE = PBYTE = ctypes.POINTER(BYTE)
173PCHAR = ctypes.POINTER(CHAR)
174LPCOLORREF = ctypes.POINTER(COLORREF)
175LPDWORD = PDWORD = ctypes.POINTER(DWORD)
176LPFILETIME = PFILETIME = ctypes.POINTER(FILETIME)
177PFLOAT = ctypes.POINTER(FLOAT)
178LPHANDLE = PHANDLE = ctypes.POINTER(HANDLE)
179PHKEY = ctypes.POINTER(HKEY)
180LPHKL = ctypes.POINTER(HKL)
181LPINT = PINT = ctypes.POINTER(INT)
182PLARGE_INTEGER = ctypes.POINTER(LARGE_INTEGER)
183PLCID = ctypes.POINTER(LCID)
184LPLONG = PLONG = ctypes.POINTER(LONG)
185LPMSG = PMSG = ctypes.POINTER(MSG)
186LPPOINT = PPOINT = ctypes.POINTER(POINT)
187PPOINTL = ctypes.POINTER(POINTL)
188LPRECT = PRECT = ctypes.POINTER(RECT)
189LPRECTL = PRECTL = ctypes.POINTER(RECTL)
190LPSC_HANDLE = ctypes.POINTER(SC_HANDLE)
191PSHORT = ctypes.POINTER(SHORT)
192LPSIZE = PSIZE = ctypes.POINTER(SIZE)
193LPSIZEL = PSIZEL = ctypes.POINTER(SIZEL)
194PSMALL_RECT = ctypes.POINTER(SMALL_RECT)
195LPUINT = PUINT = ctypes.POINTER(UINT)
196PULARGE_INTEGER = ctypes.POINTER(ULARGE_INTEGER)
197PULONG = ctypes.POINTER(ULONG)
198PUSHORT = ctypes.POINTER(USHORT)
199PWCHAR = ctypes.POINTER(WCHAR)
200LPWIN32_FIND_DATAA = PWIN32_FIND_DATAA = ctypes.POINTER(WIN32_FIND_DATAA)
201LPWIN32_FIND_DATAW = PWIN32_FIND_DATAW = ctypes.POINTER(WIN32_FIND_DATAW)
202LPWORD = PWORD = ctypes.POINTER(WORD)