Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
allendowney
GitHub Repository: allendowney/cpython
Path: blob/main/Lib/ctypes/wintypes.py
12 views
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 VARIANT_BOOL(ctypes._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 RECT(ctypes.Structure):
98
_fields_ = [("left", LONG),
99
("top", LONG),
100
("right", LONG),
101
("bottom", LONG)]
102
tagRECT = _RECTL = RECTL = RECT
103
104
class _SMALL_RECT(ctypes.Structure):
105
_fields_ = [('Left', SHORT),
106
('Top', SHORT),
107
('Right', SHORT),
108
('Bottom', SHORT)]
109
SMALL_RECT = _SMALL_RECT
110
111
class _COORD(ctypes.Structure):
112
_fields_ = [('X', SHORT),
113
('Y', SHORT)]
114
115
class POINT(ctypes.Structure):
116
_fields_ = [("x", LONG),
117
("y", LONG)]
118
tagPOINT = _POINTL = POINTL = POINT
119
120
class SIZE(ctypes.Structure):
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 FILETIME(ctypes.Structure):
129
_fields_ = [("dwLowDateTime", DWORD),
130
("dwHighDateTime", DWORD)]
131
_FILETIME = FILETIME
132
133
class MSG(ctypes.Structure):
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 WIN32_FIND_DATAA(ctypes.Structure):
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 WIN32_FIND_DATAW(ctypes.Structure):
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)
203
204