1###################################################################### 2# This file should be kept compatible with Python 2.3, see PEP 291. # 3###################################################################### 4 5# The most useful windows datatypes 6from ctypes import * 7 8BYTE = c_byte 9WORD = c_ushort 10DWORD = c_ulong 11 12WCHAR = c_wchar 13UINT = c_uint 14INT = c_int 15 16DOUBLE = c_double 17FLOAT = c_float 18 19BOOLEAN = BYTE 20BOOL = c_long 21 22from ctypes import _SimpleCData 23class VARIANT_BOOL(_SimpleCData): 24 _type_ = "v" 25 def __repr__(self): 26 return "%s(%r)" % (self.__class__.__name__, self.value) 27 28ULONG = c_ulong 29LONG = c_long 30 31USHORT = c_ushort 32SHORT = c_short 33 34# in the windows header files, these are structures. 35_LARGE_INTEGER = LARGE_INTEGER = c_longlong 36_ULARGE_INTEGER = ULARGE_INTEGER = c_ulonglong 37 38LPCOLESTR = LPOLESTR = OLESTR = c_wchar_p 39LPCWSTR = LPWSTR = c_wchar_p 40LPCSTR = LPSTR = c_char_p 41LPCVOID = LPVOID = c_void_p 42 43# WPARAM is defined as UINT_PTR (unsigned type) 44# LPARAM is defined as LONG_PTR (signed type) 45if sizeof(c_long) == sizeof(c_void_p): 46 WPARAM = c_ulong 47 LPARAM = c_long 48elif sizeof(c_longlong) == sizeof(c_void_p): 49 WPARAM = c_ulonglong 50 LPARAM = c_longlong 51 52ATOM = WORD 53LANGID = WORD 54 55COLORREF = DWORD 56LGRPID = DWORD 57LCTYPE = DWORD 58 59LCID = DWORD 60 61################################################################ 62# HANDLE types 63HANDLE = c_void_p # in the header files: void * 64 65HACCEL = HANDLE 66HBITMAP = HANDLE 67HBRUSH = HANDLE 68HCOLORSPACE = HANDLE 69HDC = HANDLE 70HDESK = HANDLE 71HDWP = HANDLE 72HENHMETAFILE = HANDLE 73HFONT = HANDLE 74HGDIOBJ = HANDLE 75HGLOBAL = HANDLE 76HHOOK = HANDLE 77HICON = HANDLE 78HINSTANCE = HANDLE 79HKEY = HANDLE 80HKL = HANDLE 81HLOCAL = HANDLE 82HMENU = HANDLE 83HMETAFILE = HANDLE 84HMODULE = HANDLE 85HMONITOR = HANDLE 86HPALETTE = HANDLE 87HPEN = HANDLE 88HRGN = HANDLE 89HRSRC = HANDLE 90HSTR = HANDLE 91HTASK = HANDLE 92HWINSTA = HANDLE 93HWND = HANDLE 94SC_HANDLE = HANDLE 95SERVICE_STATUS_HANDLE = HANDLE 96 97################################################################ 98# Some important structure definitions 99 100class RECT(Structure): 101 _fields_ = [("left", c_long), 102 ("top", c_long), 103 ("right", c_long), 104 ("bottom", c_long)] 105tagRECT = _RECTL = RECTL = RECT 106 107class _SMALL_RECT(Structure): 108 _fields_ = [('Left', c_short), 109 ('Top', c_short), 110 ('Right', c_short), 111 ('Bottom', c_short)] 112SMALL_RECT = _SMALL_RECT 113 114class _COORD(Structure): 115 _fields_ = [('X', c_short), 116 ('Y', c_short)] 117 118class POINT(Structure): 119 _fields_ = [("x", c_long), 120 ("y", c_long)] 121tagPOINT = _POINTL = POINTL = POINT 122 123class SIZE(Structure): 124 _fields_ = [("cx", c_long), 125 ("cy", c_long)] 126tagSIZE = SIZEL = SIZE 127 128def RGB(red, green, blue): 129 return red + (green << 8) + (blue << 16) 130 131class FILETIME(Structure): 132 _fields_ = [("dwLowDateTime", DWORD), 133 ("dwHighDateTime", DWORD)] 134_FILETIME = FILETIME 135 136class MSG(Structure): 137 _fields_ = [("hWnd", HWND), 138 ("message", c_uint), 139 ("wParam", WPARAM), 140 ("lParam", LPARAM), 141 ("time", DWORD), 142 ("pt", POINT)] 143tagMSG = MSG 144MAX_PATH = 260 145 146class WIN32_FIND_DATAA(Structure): 147 _fields_ = [("dwFileAttributes", DWORD), 148 ("ftCreationTime", FILETIME), 149 ("ftLastAccessTime", FILETIME), 150 ("ftLastWriteTime", FILETIME), 151 ("nFileSizeHigh", DWORD), 152 ("nFileSizeLow", DWORD), 153 ("dwReserved0", DWORD), 154 ("dwReserved1", DWORD), 155 ("cFileName", c_char * MAX_PATH), 156 ("cAlternateFileName", c_char * 14)] 157 158class WIN32_FIND_DATAW(Structure): 159 _fields_ = [("dwFileAttributes", DWORD), 160 ("ftCreationTime", FILETIME), 161 ("ftLastAccessTime", FILETIME), 162 ("ftLastWriteTime", FILETIME), 163 ("nFileSizeHigh", DWORD), 164 ("nFileSizeLow", DWORD), 165 ("dwReserved0", DWORD), 166 ("dwReserved1", DWORD), 167 ("cFileName", c_wchar * MAX_PATH), 168 ("cAlternateFileName", c_wchar * 14)] 169 170__all__ = ['ATOM', 'BOOL', 'BOOLEAN', 'BYTE', 'COLORREF', 'DOUBLE', 'DWORD', 171 'FILETIME', 'FLOAT', 'HACCEL', 'HANDLE', 'HBITMAP', 'HBRUSH', 172 'HCOLORSPACE', 'HDC', 'HDESK', 'HDWP', 'HENHMETAFILE', 'HFONT', 173 'HGDIOBJ', 'HGLOBAL', 'HHOOK', 'HICON', 'HINSTANCE', 'HKEY', 174 'HKL', 'HLOCAL', 'HMENU', 'HMETAFILE', 'HMODULE', 'HMONITOR', 175 'HPALETTE', 'HPEN', 'HRGN', 'HRSRC', 'HSTR', 'HTASK', 'HWINSTA', 176 'HWND', 'INT', 'LANGID', 'LARGE_INTEGER', 'LCID', 'LCTYPE', 177 'LGRPID', 'LONG', 'LPARAM', 'LPCOLESTR', 'LPCSTR', 'LPCVOID', 178 'LPCWSTR', 'LPOLESTR', 'LPSTR', 'LPVOID', 'LPWSTR', 'MAX_PATH', 179 'MSG', 'OLESTR', 'POINT', 'POINTL', 'RECT', 'RECTL', 'RGB', 180 'SC_HANDLE', 'SERVICE_STATUS_HANDLE', 'SHORT', 'SIZE', 'SIZEL', 181 'SMALL_RECT', 'UINT', 'ULARGE_INTEGER', 'ULONG', 'USHORT', 182 'VARIANT_BOOL', 'WCHAR', 'WIN32_FIND_DATAA', 'WIN32_FIND_DATAW', 183 'WORD', 'WPARAM', '_COORD', '_FILETIME', '_LARGE_INTEGER', 184 '_POINTL', '_RECTL', '_SMALL_RECT', '_ULARGE_INTEGER', 'tagMSG', 185 'tagPOINT', 'tagRECT', 'tagSIZE'] 186