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