1# The most useful windows datatypes
2from ctypes import *
3
4BYTE = c_byte
5WORD = c_ushort
6DWORD = c_ulong
7
8WCHAR = c_wchar
9UINT = c_uint
10INT = c_int
11
12DOUBLE = c_double
13FLOAT = c_float
14
15BOOLEAN = BYTE
16BOOL = c_long
17
18from ctypes import _SimpleCData
19class VARIANT_BOOL(_SimpleCData):
20    _type_ = "v"
21    def __repr__(self):
22        return "%s(%r)" % (self.__class__.__name__, self.value)
23
24ULONG = c_ulong
25LONG = c_long
26
27USHORT = c_ushort
28SHORT = c_short
29
30# in the windows header files, these are structures.
31_LARGE_INTEGER = LARGE_INTEGER = c_longlong
32_ULARGE_INTEGER = ULARGE_INTEGER = c_ulonglong
33
34LPCOLESTR = LPOLESTR = OLESTR = c_wchar_p
35LPCWSTR = LPWSTR = c_wchar_p
36LPCSTR = LPSTR = c_char_p
37LPCVOID = LPVOID = c_void_p
38
39# WPARAM is defined as UINT_PTR (unsigned type)
40# LPARAM is defined as LONG_PTR (signed type)
41if sizeof(c_long) == sizeof(c_void_p):
42    WPARAM = c_ulong
43    LPARAM = c_long
44elif sizeof(c_longlong) == sizeof(c_void_p):
45    WPARAM = c_ulonglong
46    LPARAM = c_longlong
47
48ATOM = WORD
49LANGID = WORD
50
51COLORREF = DWORD
52LGRPID = DWORD
53LCTYPE = DWORD
54
55LCID = DWORD
56
57################################################################
58# HANDLE types
59HANDLE = c_void_p # in the header files: void *
60
61HACCEL = HANDLE
62HBITMAP = HANDLE
63HBRUSH = HANDLE
64HCOLORSPACE = HANDLE
65HDC = HANDLE
66HDESK = HANDLE
67HDWP = HANDLE
68HENHMETAFILE = HANDLE
69HFONT = HANDLE
70HGDIOBJ = HANDLE
71HGLOBAL = HANDLE
72HHOOK = HANDLE
73HICON = HANDLE
74HINSTANCE = HANDLE
75HKEY = HANDLE
76HKL = HANDLE
77HLOCAL = HANDLE
78HMENU = HANDLE
79HMETAFILE = HANDLE
80HMODULE = HANDLE
81HMONITOR = HANDLE
82HPALETTE = HANDLE
83HPEN = HANDLE
84HRGN = HANDLE
85HRSRC = HANDLE
86HSTR = HANDLE
87HTASK = HANDLE
88HWINSTA = HANDLE
89HWND = HANDLE
90SC_HANDLE = HANDLE
91SERVICE_STATUS_HANDLE = HANDLE
92
93################################################################
94# Some important structure definitions
95
96class RECT(Structure):
97    _fields_ = [("left", c_long),
98                ("top", c_long),
99                ("right", c_long),
100                ("bottom", c_long)]
101tagRECT = _RECTL = RECTL = RECT
102
103class _SMALL_RECT(Structure):
104    _fields_ = [('Left', c_short),
105                ('Top', c_short),
106                ('Right', c_short),
107                ('Bottom', c_short)]
108SMALL_RECT = _SMALL_RECT
109
110class _COORD(Structure):
111    _fields_ = [('X', c_short),
112                ('Y', c_short)]
113
114class POINT(Structure):
115    _fields_ = [("x", c_long),
116                ("y", c_long)]
117tagPOINT = _POINTL = POINTL = POINT
118
119class SIZE(Structure):
120    _fields_ = [("cx", c_long),
121                ("cy", c_long)]
122tagSIZE = SIZEL = SIZE
123
124def RGB(red, green, blue):
125    return red + (green << 8) + (blue << 16)
126
127class FILETIME(Structure):
128    _fields_ = [("dwLowDateTime", DWORD),
129                ("dwHighDateTime", DWORD)]
130_FILETIME = FILETIME
131
132class MSG(Structure):
133    _fields_ = [("hWnd", HWND),
134                ("message", c_uint),
135                ("wParam", WPARAM),
136                ("lParam", LPARAM),
137                ("time", DWORD),
138                ("pt", POINT)]
139tagMSG = MSG
140MAX_PATH = 260
141
142class WIN32_FIND_DATAA(Structure):
143    _fields_ = [("dwFileAttributes", DWORD),
144                ("ftCreationTime", FILETIME),
145                ("ftLastAccessTime", FILETIME),
146                ("ftLastWriteTime", FILETIME),
147                ("nFileSizeHigh", DWORD),
148                ("nFileSizeLow", DWORD),
149                ("dwReserved0", DWORD),
150                ("dwReserved1", DWORD),
151                ("cFileName", c_char * MAX_PATH),
152                ("cAlternateFileName", c_char * 14)]
153
154class WIN32_FIND_DATAW(Structure):
155    _fields_ = [("dwFileAttributes", DWORD),
156                ("ftCreationTime", FILETIME),
157                ("ftLastAccessTime", FILETIME),
158                ("ftLastWriteTime", FILETIME),
159                ("nFileSizeHigh", DWORD),
160                ("nFileSizeLow", DWORD),
161                ("dwReserved0", DWORD),
162                ("dwReserved1", DWORD),
163                ("cFileName", c_wchar * MAX_PATH),
164                ("cAlternateFileName", c_wchar * 14)]
165
166__all__ = ['ATOM', 'BOOL', 'BOOLEAN', 'BYTE', 'COLORREF', 'DOUBLE', 'DWORD',
167           'FILETIME', 'FLOAT', 'HACCEL', 'HANDLE', 'HBITMAP', 'HBRUSH',
168           'HCOLORSPACE', 'HDC', 'HDESK', 'HDWP', 'HENHMETAFILE', 'HFONT',
169           'HGDIOBJ', 'HGLOBAL', 'HHOOK', 'HICON', 'HINSTANCE', 'HKEY',
170           'HKL', 'HLOCAL', 'HMENU', 'HMETAFILE', 'HMODULE', 'HMONITOR',
171           'HPALETTE', 'HPEN', 'HRGN', 'HRSRC', 'HSTR', 'HTASK', 'HWINSTA',
172           'HWND', 'INT', 'LANGID', 'LARGE_INTEGER', 'LCID', 'LCTYPE',
173           'LGRPID', 'LONG', 'LPARAM', 'LPCOLESTR', 'LPCSTR', 'LPCVOID',
174           'LPCWSTR', 'LPOLESTR', 'LPSTR', 'LPVOID', 'LPWSTR', 'MAX_PATH',
175           'MSG', 'OLESTR', 'POINT', 'POINTL', 'RECT', 'RECTL', 'RGB',
176           'SC_HANDLE', 'SERVICE_STATUS_HANDLE', 'SHORT', 'SIZE', 'SIZEL',
177           'SMALL_RECT', 'UINT', 'ULARGE_INTEGER', 'ULONG', 'USHORT',
178           'VARIANT_BOOL', 'WCHAR', 'WIN32_FIND_DATAA', 'WIN32_FIND_DATAW',
179           'WORD', 'WPARAM', '_COORD', '_FILETIME', '_LARGE_INTEGER',
180           '_POINTL', '_RECTL', '_SMALL_RECT', '_ULARGE_INTEGER', 'tagMSG',
181           'tagPOINT', 'tagRECT', 'tagSIZE']
182