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