blob: fdd08a0541e03b5812be609064bae5c5de5d60d0 [file] [log] [blame]
Thomas Wouters0e3f5912006-08-11 14:57:12 +00001# The most useful windows datatypes
Thomas Hellerbabddfc2006-03-08 19:56:54 +00002from ctypes import *
3
Thomas Hellerbabddfc2006-03-08 19:56:54 +00004BYTE = c_byte
Thomas Wouters0e3f5912006-08-11 14:57:12 +00005WORD = c_ushort
6DWORD = c_ulong
7
8WCHAR = c_wchar
9UINT = c_uint
10
11DOUBLE = c_double
12
13BOOLEAN = BYTE
14BOOL = c_long
15
16from ctypes import _SimpleCData
17class VARIANT_BOOL(_SimpleCData):
18 _type_ = "v"
19 def __repr__(self):
20 return "%s(%r)" % (self.__class__.__name__, self.value)
Thomas Hellerbabddfc2006-03-08 19:56:54 +000021
22ULONG = c_ulong
23LONG = c_long
24
Thomas Wouters0e3f5912006-08-11 14:57:12 +000025# in the windows header files, these are structures.
26_LARGE_INTEGER = LARGE_INTEGER = c_longlong
27_ULARGE_INTEGER = ULARGE_INTEGER = c_ulonglong
Thomas Hellerbabddfc2006-03-08 19:56:54 +000028
Thomas Wouters0e3f5912006-08-11 14:57:12 +000029LPCOLESTR = LPOLESTR = OLESTR = c_wchar_p
30LPCWSTR = LPWSTR = c_wchar_p
31LPCSTR = LPSTR = c_char_p
Thomas Hellerbabddfc2006-03-08 19:56:54 +000032
Thomas Woutersfc7bb8c2007-01-15 15:49:28 +000033# WPARAM is defined as UINT_PTR (unsigned type)
34# LPARAM is defined as LONG_PTR (signed type)
35if sizeof(c_long) == sizeof(c_void_p):
36 WPARAM = c_ulong
37 LPARAM = c_long
38elif sizeof(c_longlong) == sizeof(c_void_p):
39 WPARAM = c_ulonglong
40 LPARAM = c_longlong
Thomas Hellerbabddfc2006-03-08 19:56:54 +000041
Thomas Wouters0e3f5912006-08-11 14:57:12 +000042ATOM = WORD
43LANGID = WORD
Thomas Hellerbabddfc2006-03-08 19:56:54 +000044
Thomas Wouters0e3f5912006-08-11 14:57:12 +000045COLORREF = DWORD
46LGRPID = DWORD
47LCTYPE = DWORD
Thomas Hellerbabddfc2006-03-08 19:56:54 +000048
Thomas Wouters0e3f5912006-08-11 14:57:12 +000049LCID = DWORD
50
51################################################################
52# HANDLE types
Thomas Woutersfc7bb8c2007-01-15 15:49:28 +000053HANDLE = c_void_p # in the header files: void *
Thomas Wouters0e3f5912006-08-11 14:57:12 +000054
55HACCEL = HANDLE
56HBITMAP = HANDLE
57HBRUSH = HANDLE
58HCOLORSPACE = HANDLE
59HDC = HANDLE
60HDESK = HANDLE
61HDWP = HANDLE
62HENHMETAFILE = HANDLE
63HFONT = HANDLE
64HGDIOBJ = HANDLE
65HGLOBAL = HANDLE
66HHOOK = HANDLE
67HICON = HANDLE
68HINSTANCE = HANDLE
69HKEY = HANDLE
70HKL = HANDLE
71HLOCAL = HANDLE
72HMENU = HANDLE
73HMETAFILE = HANDLE
74HMODULE = HANDLE
75HMONITOR = HANDLE
76HPALETTE = HANDLE
77HPEN = HANDLE
78HRGN = HANDLE
79HRSRC = HANDLE
80HSTR = HANDLE
81HTASK = HANDLE
82HWINSTA = HANDLE
83HWND = HANDLE
84SC_HANDLE = HANDLE
85SERVICE_STATUS_HANDLE = HANDLE
86
87################################################################
88# Some important structure definitions
Thomas Hellerbabddfc2006-03-08 19:56:54 +000089
90class RECT(Structure):
91 _fields_ = [("left", c_long),
92 ("top", c_long),
93 ("right", c_long),
94 ("bottom", c_long)]
Thomas Wouters0e3f5912006-08-11 14:57:12 +000095tagRECT = _RECTL = RECTL = RECT
96
97class _SMALL_RECT(Structure):
98 _fields_ = [('Left', c_short),
99 ('Top', c_short),
100 ('Right', c_short),
101 ('Bottom', c_short)]
102SMALL_RECT = _SMALL_RECT
103
104class _COORD(Structure):
105 _fields_ = [('X', c_short),
106 ('Y', c_short)]
Thomas Hellerbabddfc2006-03-08 19:56:54 +0000107
108class POINT(Structure):
109 _fields_ = [("x", c_long),
110 ("y", c_long)]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000111tagPOINT = _POINTL = POINTL = POINT
Thomas Hellerbabddfc2006-03-08 19:56:54 +0000112
113class SIZE(Structure):
114 _fields_ = [("cx", c_long),
115 ("cy", c_long)]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000116tagSIZE = SIZEL = SIZE
Thomas Hellerbabddfc2006-03-08 19:56:54 +0000117
118def RGB(red, green, blue):
119 return red + (green << 8) + (blue << 16)
120
121class FILETIME(Structure):
122 _fields_ = [("dwLowDateTime", DWORD),
123 ("dwHighDateTime", DWORD)]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000124_FILETIME = FILETIME
Thomas Hellerbabddfc2006-03-08 19:56:54 +0000125
126class MSG(Structure):
127 _fields_ = [("hWnd", HWND),
128 ("message", c_uint),
129 ("wParam", WPARAM),
130 ("lParam", LPARAM),
131 ("time", DWORD),
132 ("pt", POINT)]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000133tagMSG = MSG
Thomas Hellerbabddfc2006-03-08 19:56:54 +0000134MAX_PATH = 260
135
136class WIN32_FIND_DATAA(Structure):
137 _fields_ = [("dwFileAttributes", DWORD),
138 ("ftCreationTime", FILETIME),
139 ("ftLastAccessTime", FILETIME),
140 ("ftLastWriteTime", FILETIME),
141 ("nFileSizeHigh", DWORD),
142 ("nFileSizeLow", DWORD),
143 ("dwReserved0", DWORD),
144 ("dwReserved1", DWORD),
145 ("cFileName", c_char * MAX_PATH),
Guido van Rossume7ba4952007-06-06 23:52:48 +0000146 ("cAlternateFileName", c_char * 14)]
Thomas Hellerbabddfc2006-03-08 19:56:54 +0000147
148class WIN32_FIND_DATAW(Structure):
149 _fields_ = [("dwFileAttributes", DWORD),
150 ("ftCreationTime", FILETIME),
151 ("ftLastAccessTime", FILETIME),
152 ("ftLastWriteTime", FILETIME),
153 ("nFileSizeHigh", DWORD),
154 ("nFileSizeLow", DWORD),
155 ("dwReserved0", DWORD),
156 ("dwReserved1", DWORD),
157 ("cFileName", c_wchar * MAX_PATH),
Guido van Rossume7ba4952007-06-06 23:52:48 +0000158 ("cAlternateFileName", c_wchar * 14)]
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000159
160__all__ = ['ATOM', 'BOOL', 'BOOLEAN', 'BYTE', 'COLORREF', 'DOUBLE',
161 'DWORD', 'FILETIME', 'HACCEL', 'HANDLE', 'HBITMAP', 'HBRUSH',
162 'HCOLORSPACE', 'HDC', 'HDESK', 'HDWP', 'HENHMETAFILE', 'HFONT',
163 'HGDIOBJ', 'HGLOBAL', 'HHOOK', 'HICON', 'HINSTANCE', 'HKEY',
164 'HKL', 'HLOCAL', 'HMENU', 'HMETAFILE', 'HMODULE', 'HMONITOR',
165 'HPALETTE', 'HPEN', 'HRGN', 'HRSRC', 'HSTR', 'HTASK', 'HWINSTA',
166 'HWND', 'LANGID', 'LARGE_INTEGER', 'LCID', 'LCTYPE', 'LGRPID',
167 'LONG', 'LPARAM', 'LPCOLESTR', 'LPCSTR', 'LPCWSTR', 'LPOLESTR',
168 'LPSTR', 'LPWSTR', 'MAX_PATH', 'MSG', 'OLESTR', 'POINT',
169 'POINTL', 'RECT', 'RECTL', 'RGB', 'SC_HANDLE',
170 'SERVICE_STATUS_HANDLE', 'SIZE', 'SIZEL', 'SMALL_RECT', 'UINT',
171 'ULARGE_INTEGER', 'ULONG', 'VARIANT_BOOL', 'WCHAR',
172 'WIN32_FIND_DATAA', 'WIN32_FIND_DATAW', 'WORD', 'WPARAM', '_COORD',
173 '_FILETIME', '_LARGE_INTEGER', '_POINTL', '_RECTL', '_SMALL_RECT',
174 '_ULARGE_INTEGER', 'tagMSG', 'tagPOINT', 'tagRECT', 'tagSIZE']