mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			202 lines
		
	
	
	
		
			5.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			202 lines
		
	
	
	
		
			5.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # 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)
 | 
