(root)/
Python-3.12.0/
Lib/
ctypes/
wintypes.py
       1  # The most useful windows datatypes
       2  import ctypes
       3  
       4  BYTE = ctypes.c_ubyte
       5  WORD = ctypes.c_ushort
       6  DWORD = ctypes.c_ulong
       7  
       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
      13  
      14  DOUBLE = ctypes.c_double
      15  FLOAT = ctypes.c_float
      16  
      17  BOOLEAN = BYTE
      18  BOOL = ctypes.c_long
      19  
      20  class ESC[4;38;5;81mVARIANT_BOOL(ESC[4;38;5;149mctypesESC[4;38;5;149m.ESC[4;38;5;149m_SimpleCData):
      21      _type_ = "v"
      22      def __repr__(self):
      23          return "%s(%r)" % (self.__class__.__name__, self.value)
      24  
      25  ULONG = ctypes.c_ulong
      26  LONG = ctypes.c_long
      27  
      28  USHORT = ctypes.c_ushort
      29  SHORT = ctypes.c_short
      30  
      31  # in the windows header files, these are structures.
      32  _LARGE_INTEGER = LARGE_INTEGER = ctypes.c_longlong
      33  _ULARGE_INTEGER = ULARGE_INTEGER = ctypes.c_ulonglong
      34  
      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
      39  
      40  # WPARAM is defined as UINT_PTR (unsigned type)
      41  # LPARAM is defined as LONG_PTR (signed type)
      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
      48  
      49  ATOM = WORD
      50  LANGID = WORD
      51  
      52  COLORREF = DWORD
      53  LGRPID = DWORD
      54  LCTYPE = DWORD
      55  
      56  LCID = DWORD
      57  
      58  ################################################################
      59  # HANDLE types
      60  HANDLE = ctypes.c_void_p # in the header files: void *
      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
      96  
      97  class ESC[4;38;5;81mRECT(ESC[4;38;5;149mctypesESC[4;38;5;149m.ESC[4;38;5;149mStructure):
      98      _fields_ = [("left", LONG),
      99                  ("top", LONG),
     100                  ("right", LONG),
     101                  ("bottom", LONG)]
     102  tagRECT = _RECTL = RECTL = RECT
     103  
     104  class ESC[4;38;5;81m_SMALL_RECT(ESC[4;38;5;149mctypesESC[4;38;5;149m.ESC[4;38;5;149mStructure):
     105      _fields_ = [('Left', SHORT),
     106                  ('Top', SHORT),
     107                  ('Right', SHORT),
     108                  ('Bottom', SHORT)]
     109  SMALL_RECT = _SMALL_RECT
     110  
     111  class ESC[4;38;5;81m_COORD(ESC[4;38;5;149mctypesESC[4;38;5;149m.ESC[4;38;5;149mStructure):
     112      _fields_ = [('X', SHORT),
     113                  ('Y', SHORT)]
     114  
     115  class ESC[4;38;5;81mPOINT(ESC[4;38;5;149mctypesESC[4;38;5;149m.ESC[4;38;5;149mStructure):
     116      _fields_ = [("x", LONG),
     117                  ("y", LONG)]
     118  tagPOINT = _POINTL = POINTL = POINT
     119  
     120  class ESC[4;38;5;81mSIZE(ESC[4;38;5;149mctypesESC[4;38;5;149m.ESC[4;38;5;149mStructure):
     121      _fields_ = [("cx", LONG),
     122                  ("cy", LONG)]
     123  tagSIZE = SIZEL = SIZE
     124  
     125  def RGB(red, green, blue):
     126      return red + (green << 8) + (blue << 16)
     127  
     128  class ESC[4;38;5;81mFILETIME(ESC[4;38;5;149mctypesESC[4;38;5;149m.ESC[4;38;5;149mStructure):
     129      _fields_ = [("dwLowDateTime", DWORD),
     130                  ("dwHighDateTime", DWORD)]
     131  _FILETIME = FILETIME
     132  
     133  class ESC[4;38;5;81mMSG(ESC[4;38;5;149mctypesESC[4;38;5;149m.ESC[4;38;5;149mStructure):
     134      _fields_ = [("hWnd", HWND),
     135                  ("message", UINT),
     136                  ("wParam", WPARAM),
     137                  ("lParam", LPARAM),
     138                  ("time", DWORD),
     139                  ("pt", POINT)]
     140  tagMSG = MSG
     141  MAX_PATH = 260
     142  
     143  class ESC[4;38;5;81mWIN32_FIND_DATAA(ESC[4;38;5;149mctypesESC[4;38;5;149m.ESC[4;38;5;149mStructure):
     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),
     152                  ("cFileName", CHAR * MAX_PATH),
     153                  ("cAlternateFileName", CHAR * 14)]
     154  
     155  class ESC[4;38;5;81mWIN32_FIND_DATAW(ESC[4;38;5;149mctypesESC[4;38;5;149m.ESC[4;38;5;149mStructure):
     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),
     164                  ("cFileName", WCHAR * MAX_PATH),
     165                  ("cAlternateFileName", WCHAR * 14)]
     166  
     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)