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