Thomas Wouters | 0e3f591 | 2006-08-11 14:57:12 +0000 | [diff] [blame] | 1 | # The most useful windows datatypes |
Hirokazu Yamamoto | cc868d4 | 2010-09-28 21:08:38 +0000 | [diff] [blame] | 2 | import ctypes |
Thomas Heller | babddfc | 2006-03-08 19:56:54 +0000 | [diff] [blame] | 3 | |
Hirokazu Yamamoto | cc868d4 | 2010-09-28 21:08:38 +0000 | [diff] [blame] | 4 | BYTE = ctypes.c_byte |
| 5 | WORD = ctypes.c_ushort |
| 6 | DWORD = ctypes.c_ulong |
Thomas Wouters | 0e3f591 | 2006-08-11 14:57:12 +0000 | [diff] [blame] | 7 | |
Hirokazu Yamamoto | cc868d4 | 2010-09-28 21:08:38 +0000 | [diff] [blame] | 8 | #UCHAR = ctypes.c_uchar |
| 9 | CHAR = ctypes.c_char |
| 10 | WCHAR = ctypes.c_wchar |
| 11 | UINT = ctypes.c_uint |
| 12 | INT = ctypes.c_int |
Thomas Wouters | 0e3f591 | 2006-08-11 14:57:12 +0000 | [diff] [blame] | 13 | |
Hirokazu Yamamoto | cc868d4 | 2010-09-28 21:08:38 +0000 | [diff] [blame] | 14 | DOUBLE = ctypes.c_double |
| 15 | FLOAT = ctypes.c_float |
Thomas Wouters | 0e3f591 | 2006-08-11 14:57:12 +0000 | [diff] [blame] | 16 | |
| 17 | BOOLEAN = BYTE |
Hirokazu Yamamoto | cc868d4 | 2010-09-28 21:08:38 +0000 | [diff] [blame] | 18 | BOOL = ctypes.c_long |
Thomas Wouters | 0e3f591 | 2006-08-11 14:57:12 +0000 | [diff] [blame] | 19 | |
Hirokazu Yamamoto | cc868d4 | 2010-09-28 21:08:38 +0000 | [diff] [blame] | 20 | class VARIANT_BOOL(ctypes._SimpleCData): |
Thomas Wouters | 0e3f591 | 2006-08-11 14:57:12 +0000 | [diff] [blame] | 21 | _type_ = "v" |
| 22 | def __repr__(self): |
| 23 | return "%s(%r)" % (self.__class__.__name__, self.value) |
Thomas Heller | babddfc | 2006-03-08 19:56:54 +0000 | [diff] [blame] | 24 | |
Hirokazu Yamamoto | cc868d4 | 2010-09-28 21:08:38 +0000 | [diff] [blame] | 25 | ULONG = ctypes.c_ulong |
| 26 | LONG = ctypes.c_long |
Thomas Heller | babddfc | 2006-03-08 19:56:54 +0000 | [diff] [blame] | 27 | |
Hirokazu Yamamoto | cc868d4 | 2010-09-28 21:08:38 +0000 | [diff] [blame] | 28 | USHORT = ctypes.c_ushort |
| 29 | SHORT = ctypes.c_short |
Hirokazu Yamamoto | c452362 | 2008-08-20 13:42:16 +0000 | [diff] [blame] | 30 | |
Thomas Wouters | 0e3f591 | 2006-08-11 14:57:12 +0000 | [diff] [blame] | 31 | # in the windows header files, these are structures. |
Hirokazu Yamamoto | cc868d4 | 2010-09-28 21:08:38 +0000 | [diff] [blame] | 32 | _LARGE_INTEGER = LARGE_INTEGER = ctypes.c_longlong |
| 33 | _ULARGE_INTEGER = ULARGE_INTEGER = ctypes.c_ulonglong |
Thomas Heller | babddfc | 2006-03-08 19:56:54 +0000 | [diff] [blame] | 34 | |
Hirokazu Yamamoto | cc868d4 | 2010-09-28 21:08:38 +0000 | [diff] [blame] | 35 | LPCOLESTR = LPOLESTR = OLESTR = ctypes.c_wchar_p |
| 36 | LPCWSTR = LPWSTR = ctypes.c_wchar_p |
| 37 | LPCSTR = LPSTR = ctypes.c_char_p |
| 38 | LPCVOID = LPVOID = ctypes.c_void_p |
Thomas Heller | babddfc | 2006-03-08 19:56:54 +0000 | [diff] [blame] | 39 | |
Thomas Wouters | fc7bb8c | 2007-01-15 15:49:28 +0000 | [diff] [blame] | 40 | # WPARAM is defined as UINT_PTR (unsigned type) |
| 41 | # LPARAM is defined as LONG_PTR (signed type) |
Hirokazu Yamamoto | cc868d4 | 2010-09-28 21:08:38 +0000 | [diff] [blame] | 42 | if ctypes.sizeof(ctypes.c_long) == ctypes.sizeof(ctypes.c_void_p): |
| 43 | WPARAM = ctypes.c_ulong |
| 44 | LPARAM = ctypes.c_long |
| 45 | elif ctypes.sizeof(ctypes.c_longlong) == ctypes.sizeof(ctypes.c_void_p): |
| 46 | WPARAM = ctypes.c_ulonglong |
| 47 | LPARAM = ctypes.c_longlong |
Thomas Heller | babddfc | 2006-03-08 19:56:54 +0000 | [diff] [blame] | 48 | |
Thomas Wouters | 0e3f591 | 2006-08-11 14:57:12 +0000 | [diff] [blame] | 49 | ATOM = WORD |
| 50 | LANGID = WORD |
Thomas Heller | babddfc | 2006-03-08 19:56:54 +0000 | [diff] [blame] | 51 | |
Thomas Wouters | 0e3f591 | 2006-08-11 14:57:12 +0000 | [diff] [blame] | 52 | COLORREF = DWORD |
| 53 | LGRPID = DWORD |
| 54 | LCTYPE = DWORD |
Thomas Heller | babddfc | 2006-03-08 19:56:54 +0000 | [diff] [blame] | 55 | |
Thomas Wouters | 0e3f591 | 2006-08-11 14:57:12 +0000 | [diff] [blame] | 56 | LCID = DWORD |
| 57 | |
| 58 | ################################################################ |
| 59 | # HANDLE types |
Hirokazu Yamamoto | cc868d4 | 2010-09-28 21:08:38 +0000 | [diff] [blame] | 60 | HANDLE = ctypes.c_void_p # in the header files: void * |
Thomas Wouters | 0e3f591 | 2006-08-11 14:57:12 +0000 | [diff] [blame] | 61 | |
| 62 | HACCEL = HANDLE |
| 63 | HBITMAP = HANDLE |
| 64 | HBRUSH = HANDLE |
| 65 | HCOLORSPACE = HANDLE |
| 66 | HDC = HANDLE |
| 67 | HDESK = HANDLE |
| 68 | HDWP = HANDLE |
| 69 | HENHMETAFILE = HANDLE |
| 70 | HFONT = HANDLE |
| 71 | HGDIOBJ = HANDLE |
| 72 | HGLOBAL = HANDLE |
| 73 | HHOOK = HANDLE |
| 74 | HICON = HANDLE |
| 75 | HINSTANCE = HANDLE |
| 76 | HKEY = HANDLE |
| 77 | HKL = HANDLE |
| 78 | HLOCAL = HANDLE |
| 79 | HMENU = HANDLE |
| 80 | HMETAFILE = HANDLE |
| 81 | HMODULE = HANDLE |
| 82 | HMONITOR = HANDLE |
| 83 | HPALETTE = HANDLE |
| 84 | HPEN = HANDLE |
| 85 | HRGN = HANDLE |
| 86 | HRSRC = HANDLE |
| 87 | HSTR = HANDLE |
| 88 | HTASK = HANDLE |
| 89 | HWINSTA = HANDLE |
| 90 | HWND = HANDLE |
| 91 | SC_HANDLE = HANDLE |
| 92 | SERVICE_STATUS_HANDLE = HANDLE |
| 93 | |
| 94 | ################################################################ |
| 95 | # Some important structure definitions |
Thomas Heller | babddfc | 2006-03-08 19:56:54 +0000 | [diff] [blame] | 96 | |
Hirokazu Yamamoto | cc868d4 | 2010-09-28 21:08:38 +0000 | [diff] [blame] | 97 | class RECT(ctypes.Structure): |
| 98 | _fields_ = [("left", LONG), |
| 99 | ("top", LONG), |
| 100 | ("right", LONG), |
| 101 | ("bottom", LONG)] |
Thomas Wouters | 0e3f591 | 2006-08-11 14:57:12 +0000 | [diff] [blame] | 102 | tagRECT = _RECTL = RECTL = RECT |
| 103 | |
Hirokazu Yamamoto | cc868d4 | 2010-09-28 21:08:38 +0000 | [diff] [blame] | 104 | class _SMALL_RECT(ctypes.Structure): |
| 105 | _fields_ = [('Left', SHORT), |
| 106 | ('Top', SHORT), |
| 107 | ('Right', SHORT), |
| 108 | ('Bottom', SHORT)] |
Thomas Wouters | 0e3f591 | 2006-08-11 14:57:12 +0000 | [diff] [blame] | 109 | SMALL_RECT = _SMALL_RECT |
| 110 | |
Hirokazu Yamamoto | cc868d4 | 2010-09-28 21:08:38 +0000 | [diff] [blame] | 111 | class _COORD(ctypes.Structure): |
| 112 | _fields_ = [('X', SHORT), |
| 113 | ('Y', SHORT)] |
Thomas Heller | babddfc | 2006-03-08 19:56:54 +0000 | [diff] [blame] | 114 | |
Hirokazu Yamamoto | cc868d4 | 2010-09-28 21:08:38 +0000 | [diff] [blame] | 115 | class POINT(ctypes.Structure): |
| 116 | _fields_ = [("x", LONG), |
| 117 | ("y", LONG)] |
Thomas Wouters | 0e3f591 | 2006-08-11 14:57:12 +0000 | [diff] [blame] | 118 | tagPOINT = _POINTL = POINTL = POINT |
Thomas Heller | babddfc | 2006-03-08 19:56:54 +0000 | [diff] [blame] | 119 | |
Hirokazu Yamamoto | cc868d4 | 2010-09-28 21:08:38 +0000 | [diff] [blame] | 120 | class SIZE(ctypes.Structure): |
| 121 | _fields_ = [("cx", LONG), |
| 122 | ("cy", LONG)] |
Thomas Wouters | 0e3f591 | 2006-08-11 14:57:12 +0000 | [diff] [blame] | 123 | tagSIZE = SIZEL = SIZE |
Thomas Heller | babddfc | 2006-03-08 19:56:54 +0000 | [diff] [blame] | 124 | |
| 125 | def RGB(red, green, blue): |
| 126 | return red + (green << 8) + (blue << 16) |
| 127 | |
Hirokazu Yamamoto | cc868d4 | 2010-09-28 21:08:38 +0000 | [diff] [blame] | 128 | class FILETIME(ctypes.Structure): |
Thomas Heller | babddfc | 2006-03-08 19:56:54 +0000 | [diff] [blame] | 129 | _fields_ = [("dwLowDateTime", DWORD), |
| 130 | ("dwHighDateTime", DWORD)] |
Thomas Wouters | 0e3f591 | 2006-08-11 14:57:12 +0000 | [diff] [blame] | 131 | _FILETIME = FILETIME |
Thomas Heller | babddfc | 2006-03-08 19:56:54 +0000 | [diff] [blame] | 132 | |
Hirokazu Yamamoto | cc868d4 | 2010-09-28 21:08:38 +0000 | [diff] [blame] | 133 | class MSG(ctypes.Structure): |
Thomas Heller | babddfc | 2006-03-08 19:56:54 +0000 | [diff] [blame] | 134 | _fields_ = [("hWnd", HWND), |
Hirokazu Yamamoto | cc868d4 | 2010-09-28 21:08:38 +0000 | [diff] [blame] | 135 | ("message", UINT), |
Thomas Heller | babddfc | 2006-03-08 19:56:54 +0000 | [diff] [blame] | 136 | ("wParam", WPARAM), |
| 137 | ("lParam", LPARAM), |
| 138 | ("time", DWORD), |
| 139 | ("pt", POINT)] |
Thomas Wouters | 0e3f591 | 2006-08-11 14:57:12 +0000 | [diff] [blame] | 140 | tagMSG = MSG |
Thomas Heller | babddfc | 2006-03-08 19:56:54 +0000 | [diff] [blame] | 141 | MAX_PATH = 260 |
| 142 | |
Hirokazu Yamamoto | cc868d4 | 2010-09-28 21:08:38 +0000 | [diff] [blame] | 143 | class WIN32_FIND_DATAA(ctypes.Structure): |
Thomas Heller | babddfc | 2006-03-08 19:56:54 +0000 | [diff] [blame] | 144 | _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 Yamamoto | cc868d4 | 2010-09-28 21:08:38 +0000 | [diff] [blame] | 152 | ("cFileName", CHAR * MAX_PATH), |
| 153 | ("cAlternateFileName", CHAR * 14)] |
Thomas Heller | babddfc | 2006-03-08 19:56:54 +0000 | [diff] [blame] | 154 | |
Hirokazu Yamamoto | cc868d4 | 2010-09-28 21:08:38 +0000 | [diff] [blame] | 155 | class WIN32_FIND_DATAW(ctypes.Structure): |
Thomas Heller | babddfc | 2006-03-08 19:56:54 +0000 | [diff] [blame] | 156 | _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 Yamamoto | cc868d4 | 2010-09-28 21:08:38 +0000 | [diff] [blame] | 164 | ("cFileName", WCHAR * MAX_PATH), |
| 165 | ("cAlternateFileName", WCHAR * 14)] |
Thomas Wouters | 0e3f591 | 2006-08-11 14:57:12 +0000 | [diff] [blame] | 166 | |
Hirokazu Yamamoto | cc868d4 | 2010-09-28 21:08:38 +0000 | [diff] [blame] | 167 | ################################################################ |
| 168 | # Pointer types |
| 169 | |
| 170 | LPBOOL = PBOOL = ctypes.POINTER(BOOL) |
| 171 | PBOOLEAN = ctypes.POINTER(BOOLEAN) |
| 172 | LPBYTE = PBYTE = ctypes.POINTER(BYTE) |
| 173 | PCHAR = ctypes.POINTER(CHAR) |
| 174 | LPCOLORREF = ctypes.POINTER(COLORREF) |
| 175 | LPDWORD = PDWORD = ctypes.POINTER(DWORD) |
| 176 | LPFILETIME = PFILETIME = ctypes.POINTER(FILETIME) |
| 177 | PFLOAT = ctypes.POINTER(FLOAT) |
| 178 | LPHANDLE = PHANDLE = ctypes.POINTER(HANDLE) |
| 179 | PHKEY = ctypes.POINTER(HKEY) |
| 180 | LPHKL = ctypes.POINTER(HKL) |
| 181 | LPINT = PINT = ctypes.POINTER(INT) |
| 182 | PLARGE_INTEGER = ctypes.POINTER(LARGE_INTEGER) |
| 183 | PLCID = ctypes.POINTER(LCID) |
| 184 | LPLONG = PLONG = ctypes.POINTER(LONG) |
| 185 | LPMSG = PMSG = ctypes.POINTER(MSG) |
| 186 | LPPOINT = PPOINT = ctypes.POINTER(POINT) |
| 187 | PPOINTL = ctypes.POINTER(POINTL) |
| 188 | LPRECT = PRECT = ctypes.POINTER(RECT) |
| 189 | LPRECTL = PRECTL = ctypes.POINTER(RECTL) |
| 190 | LPSC_HANDLE = ctypes.POINTER(SC_HANDLE) |
| 191 | PSHORT = ctypes.POINTER(SHORT) |
| 192 | LPSIZE = PSIZE = ctypes.POINTER(SIZE) |
| 193 | LPSIZEL = PSIZEL = ctypes.POINTER(SIZEL) |
| 194 | PSMALL_RECT = ctypes.POINTER(SMALL_RECT) |
| 195 | LPUINT = PUINT = ctypes.POINTER(UINT) |
| 196 | PULARGE_INTEGER = ctypes.POINTER(ULARGE_INTEGER) |
| 197 | PULONG = ctypes.POINTER(ULONG) |
| 198 | PUSHORT = ctypes.POINTER(USHORT) |
| 199 | PWCHAR = ctypes.POINTER(WCHAR) |
| 200 | LPWIN32_FIND_DATAA = PWIN32_FIND_DATAA = ctypes.POINTER(WIN32_FIND_DATAA) |
| 201 | LPWIN32_FIND_DATAW = PWIN32_FIND_DATAW = ctypes.POINTER(WIN32_FIND_DATAW) |
| 202 | LPWORD = PWORD = ctypes.POINTER(WORD) |