| # The most useful windows datatypes |
| import ctypes |
| |
| BYTE = ctypes.c_byte |
| WORD = ctypes.c_ushort |
| DWORD = ctypes.c_ulong |
| |
| #UCHAR = ctypes.c_uchar |
| CHAR = ctypes.c_char |
| WCHAR = ctypes.c_wchar |
| UINT = ctypes.c_uint |
| INT = ctypes.c_int |
| |
| DOUBLE = ctypes.c_double |
| FLOAT = ctypes.c_float |
| |
| BOOLEAN = BYTE |
| BOOL = ctypes.c_long |
| |
| class VARIANT_BOOL(ctypes._SimpleCData): |
| _type_ = "v" |
| def __repr__(self): |
| return "%s(%r)" % (self.__class__.__name__, self.value) |
| |
| ULONG = ctypes.c_ulong |
| LONG = ctypes.c_long |
| |
| USHORT = ctypes.c_ushort |
| SHORT = ctypes.c_short |
| |
| # in the windows header files, these are structures. |
| _LARGE_INTEGER = LARGE_INTEGER = ctypes.c_longlong |
| _ULARGE_INTEGER = ULARGE_INTEGER = ctypes.c_ulonglong |
| |
| LPCOLESTR = LPOLESTR = OLESTR = ctypes.c_wchar_p |
| LPCWSTR = LPWSTR = ctypes.c_wchar_p |
| LPCSTR = LPSTR = ctypes.c_char_p |
| LPCVOID = LPVOID = ctypes.c_void_p |
| |
| # WPARAM is defined as UINT_PTR (unsigned type) |
| # LPARAM is defined as LONG_PTR (signed type) |
| if ctypes.sizeof(ctypes.c_long) == ctypes.sizeof(ctypes.c_void_p): |
| WPARAM = ctypes.c_ulong |
| LPARAM = ctypes.c_long |
| elif ctypes.sizeof(ctypes.c_longlong) == ctypes.sizeof(ctypes.c_void_p): |
| WPARAM = ctypes.c_ulonglong |
| LPARAM = ctypes.c_longlong |
| |
| ATOM = WORD |
| LANGID = WORD |
| |
| COLORREF = DWORD |
| LGRPID = DWORD |
| LCTYPE = DWORD |
| |
| LCID = DWORD |
| |
| ################################################################ |
| # HANDLE types |
| HANDLE = ctypes.c_void_p # in the header files: void * |
| |
| 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 |
| |
| ################################################################ |
| # Some important structure definitions |
| |
| class RECT(ctypes.Structure): |
| _fields_ = [("left", LONG), |
| ("top", LONG), |
| ("right", LONG), |
| ("bottom", LONG)] |
| tagRECT = _RECTL = RECTL = RECT |
| |
| class _SMALL_RECT(ctypes.Structure): |
| _fields_ = [('Left', SHORT), |
| ('Top', SHORT), |
| ('Right', SHORT), |
| ('Bottom', SHORT)] |
| SMALL_RECT = _SMALL_RECT |
| |
| class _COORD(ctypes.Structure): |
| _fields_ = [('X', SHORT), |
| ('Y', SHORT)] |
| |
| class POINT(ctypes.Structure): |
| _fields_ = [("x", LONG), |
| ("y", LONG)] |
| tagPOINT = _POINTL = POINTL = POINT |
| |
| class SIZE(ctypes.Structure): |
| _fields_ = [("cx", LONG), |
| ("cy", LONG)] |
| tagSIZE = SIZEL = SIZE |
| |
| def RGB(red, green, blue): |
| return red + (green << 8) + (blue << 16) |
| |
| class FILETIME(ctypes.Structure): |
| _fields_ = [("dwLowDateTime", DWORD), |
| ("dwHighDateTime", DWORD)] |
| _FILETIME = FILETIME |
| |
| class MSG(ctypes.Structure): |
| _fields_ = [("hWnd", HWND), |
| ("message", UINT), |
| ("wParam", WPARAM), |
| ("lParam", LPARAM), |
| ("time", DWORD), |
| ("pt", POINT)] |
| tagMSG = MSG |
| MAX_PATH = 260 |
| |
| class WIN32_FIND_DATAA(ctypes.Structure): |
| _fields_ = [("dwFileAttributes", DWORD), |
| ("ftCreationTime", FILETIME), |
| ("ftLastAccessTime", FILETIME), |
| ("ftLastWriteTime", FILETIME), |
| ("nFileSizeHigh", DWORD), |
| ("nFileSizeLow", DWORD), |
| ("dwReserved0", DWORD), |
| ("dwReserved1", DWORD), |
| ("cFileName", CHAR * MAX_PATH), |
| ("cAlternateFileName", CHAR * 14)] |
| |
| class WIN32_FIND_DATAW(ctypes.Structure): |
| _fields_ = [("dwFileAttributes", DWORD), |
| ("ftCreationTime", FILETIME), |
| ("ftLastAccessTime", FILETIME), |
| ("ftLastWriteTime", FILETIME), |
| ("nFileSizeHigh", DWORD), |
| ("nFileSizeLow", DWORD), |
| ("dwReserved0", DWORD), |
| ("dwReserved1", DWORD), |
| ("cFileName", WCHAR * MAX_PATH), |
| ("cAlternateFileName", WCHAR * 14)] |
| |
| ################################################################ |
| # Pointer types |
| |
| LPBOOL = PBOOL = ctypes.POINTER(BOOL) |
| PBOOLEAN = ctypes.POINTER(BOOLEAN) |
| LPBYTE = PBYTE = ctypes.POINTER(BYTE) |
| PCHAR = ctypes.POINTER(CHAR) |
| LPCOLORREF = ctypes.POINTER(COLORREF) |
| LPDWORD = PDWORD = ctypes.POINTER(DWORD) |
| LPFILETIME = PFILETIME = ctypes.POINTER(FILETIME) |
| PFLOAT = ctypes.POINTER(FLOAT) |
| LPHANDLE = PHANDLE = ctypes.POINTER(HANDLE) |
| PHKEY = ctypes.POINTER(HKEY) |
| LPHKL = ctypes.POINTER(HKL) |
| LPINT = PINT = ctypes.POINTER(INT) |
| PLARGE_INTEGER = ctypes.POINTER(LARGE_INTEGER) |
| PLCID = ctypes.POINTER(LCID) |
| LPLONG = PLONG = ctypes.POINTER(LONG) |
| LPMSG = PMSG = ctypes.POINTER(MSG) |
| LPPOINT = PPOINT = ctypes.POINTER(POINT) |
| PPOINTL = ctypes.POINTER(POINTL) |
| LPRECT = PRECT = ctypes.POINTER(RECT) |
| LPRECTL = PRECTL = ctypes.POINTER(RECTL) |
| LPSC_HANDLE = ctypes.POINTER(SC_HANDLE) |
| PSHORT = ctypes.POINTER(SHORT) |
| LPSIZE = PSIZE = ctypes.POINTER(SIZE) |
| LPSIZEL = PSIZEL = ctypes.POINTER(SIZEL) |
| PSMALL_RECT = ctypes.POINTER(SMALL_RECT) |
| LPUINT = PUINT = ctypes.POINTER(UINT) |
| PULARGE_INTEGER = ctypes.POINTER(ULARGE_INTEGER) |
| PULONG = ctypes.POINTER(ULONG) |
| PUSHORT = ctypes.POINTER(USHORT) |
| PWCHAR = ctypes.POINTER(WCHAR) |
| LPWIN32_FIND_DATAA = PWIN32_FIND_DATAA = ctypes.POINTER(WIN32_FIND_DATAA) |
| LPWIN32_FIND_DATAW = PWIN32_FIND_DATAW = ctypes.POINTER(WIN32_FIND_DATAW) |
| LPWORD = PWORD = ctypes.POINTER(WORD) |