add skeleton for variant type support
[pywinlite.git] / message.py
blobc7ca4674712cf4096dd16c9d53ae41ce8f55bb77
1 #Copyright (c) 2008 Vincent Povirk
3 #Permission is hereby granted, free of charge, to any person
4 #obtaining a copy of this software and associated documentation
5 #files (the "Software"), to deal in the Software without
6 #restriction, including without limitation the rights to use,
7 #copy, modify, merge, publish, distribute, sublicense, and/or sell
8 #copies of the Software, and to permit persons to whom the
9 #Software is furnished to do so, subject to the following
10 #conditions:
12 #The above copyright notice and this permission notice shall be
13 #included in all copies or substantial portions of the Software.
15 #THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 #EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
17 #OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 #NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19 #HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20 #WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 #FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22 #OTHER DEALINGS IN THE SOFTWARE.
24 # Message definitions
25 # see http://msdn.microsoft.com/en-us/library/ms632590(VS.85).aspx
27 from ctypes import windll, Structure, POINTER, WINFUNCTYPE, byref
28 from winlitecfg import get_aw_symbols
29 from winliteutils import get_symbols, NONZERO
30 from windef import UINT, HDESK, HWND, LUID, WPARAM, LPARAM, DWORD, POINT, ULONG_PTR, LRESULT, LPDWORD, LONG, BOOL, LPVOID, INT, LPCTSTR, PDWORD_PTR
32 BSF_QUERY = 0x00000001
33 BSF_IGNORECURRENTTASK = 0x00000002
34 BSF_FLUSHDISK = 0x00000004
35 BSF_NOHANG = 0x00000008
36 BSF_POSTMESSAGE = 0x00000010
37 BSF_FORCEIFHUNG = 0x00000020
38 BSF_NOTIMEOUTIFNOTHUNG = 0x00000040
39 BSF_ALLOWSFW = 0x00000080
40 BSF_SENDNOTIFYMESSAGE = 0x00000100
41 BSF_RETURNHDESK = 0x00000200
42 BSF_LUID = 0x00000400
44 BSM_ALLCOMPONENTS = 0x00000000
45 BSM_VXDS = 0x00000001
46 BSM_NETDRIVER = 0x00000002
47 BSM_INSTALLABLEDRIVERS = 0x00000004
48 BSM_APPLICATIONS = 0x00000008
49 BSM_ALLDESKTOPS = 0x00000010
51 QS_KEY = 0x0001
52 QS_MOUSEMOVE = 0x0002
53 QS_MOUSEBUTTON = 0x0004
54 QS_MOUSE = (QS_MOUSEMOVE | QS_MOUSEBUTTON)
55 QS_POSTMESSAGE = 0x0008
56 QS_TIMER = 0x0010
57 QS_PAINT = 0x0020
58 QS_SENDMESSAGE = 0x0040
59 QS_HOTKEY = 0x0080
60 QS_ALLPOSTMESSAGE = 0x0100
61 QS_RAWINPUT = 0x0400
62 QS_INPUT = (QS_MOUSE | QS_KEY | QS_RAWINPUT)
63 QS_ALLEVENTS = (QS_INPUT | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_HOTKEY)
64 QS_ALLINPUT = (QS_ALLEVENTS | QS_SENDMESSAGE)
66 ISMEX_NOSEND = 0x00000000
67 ISMEX_SEND = 0x00000001
68 ISMEX_NOTIFY = 0x00000002
69 ISMEX_CALLBACK = 0x00000004
70 ISMEX_REPLIED = 0x00000008
72 PM_NOREMOVE = 0x0000
73 PM_REMOVE = 0x0001
74 PM_NOYIELD = 0x0002
75 PM_QS_INPUT = (QS_INPUT << 16)
76 PM_QS_POSTMESSAGE = ((QS_POSTMESSAGE | QS_HOTKEY | QS_TIMER) << 16)
77 PM_QS_PAINT = (QS_PAINT << 16)
78 PM_QS_SENDMESSAGE = (QS_SENDMESSAGE << 16)
80 HWND_BROADCAST = 0xFFFF
82 SMTO_NORMAL = 0x0000
83 SMTO_BLOCK = 0x0001
84 SMTO_ABORTIFHUNG = 0x0002
85 SMTO_NOTIMEOUTIFNOTHUNG = 0x0008
87 class BSMINFO(Structure):
88 _fields_ = [
89 ('cbSize', UINT),
90 ('hdesk', HDESK),
91 ('hwnd', HWND),
92 ('luid', LUID),
94 PBSMINFO = POINTER(BSMINFO)
96 class MSG(Structure):
97 _fields_ = [
98 ('hwnd', HWND),
99 ('message', UINT),
100 ('wParam', WPARAM),
101 ('lParam', LPARAM),
102 ('time', DWORD),
103 ('pt', POINT),
105 LPMSG = PMSG = POINTER(MSG)
107 SENDASYNCPROC = WINFUNCTYPE(None, HWND, UINT, ULONG_PTR, LRESULT)
109 get_aw_symbols(globals(), windll.user32, ['BroadcastSystemMessage', 'BroadcastSystemMessageEx', 'DispatchMessage', 'GetMessage', 'PeekMessage', 'PostMessage', 'PostThreadMessage', 'RegisterWindowMessage', 'SendMessage', 'SendMessageCallback', 'SendMessageTimeout', 'SendNotifyMessage'])
110 get_symbols(globals(), windll.user32, ['GetInputState', 'GetMessageExtraInfo', 'GetMessagePos', 'GetMessageTime', 'GetQueueStatus', 'InSendMessage', 'InSendMessageEx', 'PostQuitMessage', 'ReplyMessage', 'SetMessageExtraInfo', 'TranslateMessage', 'WaitMessage'])
112 BroadcastSystemMessage.argtypes = [DWORD, LPDWORD, UINT, WPARAM, LPARAM]
113 BroadcastSystemMessage.restype = LONG
115 BroadcastSystemMessageEx.argtypes = [DWORD, LPDWORD, UINT, WPARAM, LPARAM, PBSMINFO]
116 BroadcastSystemMessageEx.restype = LONG
118 DispatchMessage.argtypes = [LPMSG]
119 DispatchMessage.restype = LRESULT
121 GetInputState.argtypes = []
122 GetInputState.restype = BOOL
124 GetMessage.argtypes = [LPMSG, HWND, UINT, UINT]
125 GetMessage.restype = BOOL
127 GetMessageExtraInfo.argtypes = []
128 GetMessageExtraInfo.restype = LPARAM
130 GetMessagePos.argtypes = []
131 GetMessagePos.restype = DWORD #MAKEPOINTS
133 GetMessageTime.argtypes = []
134 GetMessageTime.restype = LONG
136 GetQueueStatus.argtypes = [UINT]
137 GetQueueStatus.restype = DWORD
139 InSendMessage.argtypes = []
140 InSendMessage.restype = BOOL
142 InSendMessageEx.argtypes = [LPVOID]
143 InSendMessageEx.restype = DWORD
145 PeekMessage.argtypes = [LPMSG, HWND, UINT, UINT, UINT]
146 PeekMessage.restype = BOOL
148 PostMessage.argtypes = [HWND, UINT, WPARAM, LPARAM]
149 PostMessage.restype = NONZERO
151 PostQuitMessage.argtypes = [INT]
152 PostQuitMessage.restype = None
154 PostThreadMessage.argtypes = [DWORD, UINT, WPARAM, LPARAM]
155 PostThreadMessage.restype = NONZERO
157 RegisterWindowMessage.argtypes = [LPCTSTR]
158 RegisterWindowMessage.restype = NONZERO
160 ReplyMessage.argtypes = [LRESULT]
161 ReplyMessage.restype = BOOL
163 SendMessage.argtypes = [HWND, UINT, WPARAM, LPARAM]
164 SendMessage.restype = LRESULT
166 SendMessageCallback.argtypes = [HWND, UINT, WPARAM, LPARAM, SENDASYNCPROC, ULONG_PTR]
167 SendMessageCallback.restype = NONZERO
169 SendMessageTimeout.argtypes = [HWND, UINT, WPARAM, LPARAM, UINT, UINT, PDWORD_PTR]
170 SendMessageTimeout.restype = LRESULT
172 SendNotifyMessage.argtypes = [HWND, UINT, WPARAM, LPARAM]
173 SendNotifyMessage.restype = NONZERO
175 SetMessageExtraInfo.argtypes = [LPARAM]
176 SetMessageExtraInfo.restype = LPARAM
178 TranslateMessage.argtypes = [LPMSG]
179 TranslateMessage.restype = BOOL
181 WaitMessage.argtypes = []
182 WaitMessage.restype = NONZERO
184 def loop():
185 """loop() - standard windows main loop
187 Run a message loop until PostQuitMessage() is called, then return the integer value passed to PostQuitMessage()."""
188 msg = MSG()
189 while True:
190 result = GetMessage(byref(msg), 0, 0, 0)
191 if result == 0: #got WM_QUIT message
192 return msg.wParam
193 elif result == -1: #error
194 raise WinError()
195 TranslateMessage(byref(msg))
196 DispatchMessage(byref(msg))
198 # Message constants
199 WM_NULL = 0x0000
200 WM_CREATE = 0x0001
201 WM_DESTROY = 0x0002
202 WM_MOVE = 0x0003
203 WM_SIZEWAIT = 0x0004
204 WM_SIZE = 0x0005
205 WM_ACTIVATE = 0x0006
206 WM_SETFOCUS = 0x0007
207 WM_KILLFOCUS = 0x0008
208 WM_SETVISIBLE = 0x0009
209 WM_ENABLE = 0x000a
210 WM_SETREDRAW = 0x000b
211 WM_SETTEXT = 0x000c
212 WM_GETTEXT = 0x000d
213 WM_GETTEXTLENGTH = 0x000e
214 WM_PAINT = 0x000f
215 WM_CLOSE = 0x0010
216 WM_QUERYENDSESSION = 0x0011
217 WM_QUIT = 0x0012
218 WM_QUERYOPEN = 0x0013
219 WM_ERASEBKGND = 0x0014
220 WM_SYSCOLORCHANGE = 0x0015
221 WM_ENDSESSION = 0x0016
222 WM_SYSTEMERROR = 0x0017
223 WM_SHOWWINDOW = 0x0018
224 WM_CTLCOLOR = 0x0019
225 WM_WININICHANGE = 0x001a
226 WM_SETTINGCHANGE = WM_WININICHANGE
227 WM_DEVMODECHANGE = 0x001b
228 WM_ACTIVATEAPP = 0x001c
229 WM_FONTCHANGE = 0x001d
230 WM_TIMECHANGE = 0x001e
231 WM_CANCELMODE = 0x001f
232 WM_SETCURSOR = 0x0020
233 WM_MOUSEACTIVATE = 0x0021
234 WM_CHILDACTIVATE = 0x0022
235 WM_QUEUESYNC = 0x0023
236 WM_GETMINMAXINFO = 0x0024
237 WM_PAINTICON = 0x0026
238 WM_ICONERASEBKGND = 0x0027
239 WM_NEXTDLGCTL = 0x0028
240 WM_ALTTABACTIVE = 0x0029
241 WM_SPOOLERSTATUS = 0x002a
242 WM_DRAWITEM = 0x002b
243 WM_MEASUREITEM = 0x002c
244 WM_DELETEITEM = 0x002d
245 WM_VKEYTOITEM = 0x002e
246 WM_CHARTOITEM = 0x002f
247 WM_SETFONT = 0x0030
248 WM_GETFONT = 0x0031
249 WM_SETHOTKEY = 0x0032
250 WM_GETHOTKEY = 0x0033
251 WM_FILESYSCHANGE = 0x0034
252 WM_ISACTIVEICON = 0x0035
253 WM_QUERYPARKICON = 0x0036
254 WM_QUERYDRAGICON = 0x0037
255 WM_QUERYSAVESTATE = 0x0038
256 WM_COMPAREITEM = 0x0039
257 WM_TESTING = 0x003a
258 WM_GETOBJECT = 0x003d
259 WM_ACTIVATESHELLWINDOW = 0x003e
260 WM_COMPACTING = 0x0041
261 WM_COMMNOTIFY = 0x0044
262 WM_WINDOWPOSCHANGING = 0x0046
263 WM_WINDOWPOSCHANGED = 0x0047
264 WM_POWER = 0x0048
265 WM_COPYDATA = 0x004a
266 WM_CANCELJOURNAL = 0x004b
267 WM_KEYF1 = 0x004d
268 WM_NOTIFY = 0x004e
269 WM_INPUTLANGCHANGEREQUEST = 0x0050
270 WM_INPUTLANGCHANGE = 0x0051
271 WM_TCARD = 0x0052
272 WM_HELP = 0x0053
273 WM_USERCHANGED = 0x0054
274 WM_NOTIFYFORMAT = 0x0055
275 WM_CONTEXTMENU = 0x007b
276 WM_STYLECHANGING = 0x007c
277 WM_STYLECHANGED = 0x007d
278 WM_DISPLAYCHANGE = 0x007e
279 WM_GETICON = 0x007f
280 WM_SETICON = 0x0080
281 WM_NCCREATE = 0x0081
282 WM_NCDESTROY = 0x0082
283 WM_NCCALCSIZE = 0x0083
284 WM_NCHITTEST = 0x0084
285 WM_NCPAINT = 0x0085
286 WM_NCACTIVATE = 0x0086
287 WM_GETDLGCODE = 0x0087
288 WM_SYNCPAINT = 0x0088
289 WM_SYNCTASK = 0x0089
290 WM_NCMOUSEMOVE = 0x00a0
291 WM_NCLBUTTONDOWN = 0x00a1
292 WM_NCLBUTTONUP = 0x00a2
293 WM_NCLBUTTONDBLCLK = 0x00a3
294 WM_NCRBUTTONDOWN = 0x00a4
295 WM_NCRBUTTONUP = 0x00a5
296 WM_NCRBUTTONDBLCLK = 0x00a6
297 WM_NCMBUTTONDOWN = 0x00a7
298 WM_NCMBUTTONUP = 0x00a8
299 WM_NCMBUTTONDBLCLK = 0x00a9
300 WM_NCXBUTTONDOWN = 0x00ab
301 WM_NCXBUTTONUP = 0x00ac
302 WM_NCXBUTTONDBLCLK = 0x00ad
303 WM_INPUT_DEVICE_CHANGE = 0x00fe
304 WM_INPUT = 0x00ff
305 WM_KEYDOWN = 0x0100
306 WM_KEYUP = 0x0101
307 WM_CHAR = 0x0102
308 WM_DEADCHAR = 0x0103
309 WM_SYSKEYDOWN = 0x0104
310 WM_SYSKEYUP = 0x0105
311 WM_SYSCHAR = 0x0106
312 WM_SYSDEADCHAR = 0x0107
313 WM_UNICHAR = 0x0109
314 WM_KEYFIRST = WM_KEYDOWN
315 WM_KEYLAST = 0x0109
316 WM_IME_STARTCOMPOSITION = 0x010d
317 WM_IME_ENDCOMPOSITION = 0x010e
318 WM_IME_COMPOSITION = 0x010f
319 WM_IME_KEYLAST = 0x010f
320 WM_INITDIALOG = 0x0110
321 WM_COMMAND = 0x0111
322 WM_SYSCOMMAND = 0x0112
323 WM_TIMER = 0x0113
324 WM_HSCROLL = 0x0114
325 WM_VSCROLL = 0x0115
326 WM_INITMENU = 0x0116
327 WM_INITMENUPOPUP = 0x0117
328 WM_MENUSELECT = 0x011F
329 WM_MENUCHAR = 0x0120
330 WM_ENTERIDLE = 0x0121
331 WM_MENURBUTTONUP = 0x0122
332 WM_MENUDRAG = 0x0123
333 WM_MENUGETOBJECT = 0x0124
334 WM_UNINITMENUPOPUP = 0x0125
335 WM_MENUCOMMAND = 0x0126
336 WM_CHANGEUISTATE = 0x0127
337 WM_UPDATEUISTATE = 0x0128
338 WM_QUERYUISTATE = 0x0129
339 WM_LBTRACKPOINT = 0x0131
340 WM_CTLCOLORMSGBOX = 0x0132
341 WM_CTLCOLOREDIT = 0x0133
342 WM_CTLCOLORLISTBOX = 0x0134
343 WM_CTLCOLORBTN = 0x0135
344 WM_CTLCOLORDLG = 0x0136
345 WM_CTLCOLORSCROLLBAR = 0x0137
346 WM_CTLCOLORSTATIC = 0x0138
347 WM_MOUSEMOVE = 0x0200
348 WM_LBUTTONDOWN = 0x0201
349 WM_LBUTTONUP = 0x0202
350 WM_LBUTTONDBLCLK = 0x0203
351 WM_RBUTTONDOWN = 0x0204
352 WM_RBUTTONUP = 0x0205
353 WM_RBUTTONDBLCLK = 0x0206
354 WM_MBUTTONDOWN = 0x0207
355 WM_MBUTTONUP = 0x0208
356 WM_MBUTTONDBLCLK = 0x0209
357 WM_MOUSEWHEEL = 0x020A
358 WM_MOUSEFIRST = 0x0200
359 WM_MOUSELAST = 0x020E
360 WM_PARENTNOTIFY = 0x0210
361 WM_ENTERMENULOOP = 0x0211
362 WM_EXITMENULOOP = 0x0212
363 WM_NEXTMENU = 0x0213
364 WM_SIZING = 0x0214
365 WM_CAPTURECHANGED = 0x0215
366 WM_MOVING = 0x0216
367 WM_POWERBROADCAST = 0x0218
368 WM_DEVICECHANGE = 0x0219
369 WM_MDICREATE = 0x0220
370 WM_MDIDESTROY = 0x0221
371 WM_MDIACTIVATE = 0x0222
372 WM_MDIRESTORE = 0x0223
373 WM_MDINEXT = 0x0224
374 WM_MDIMAXIMIZE = 0x0225
375 WM_MDITILE = 0x0226
376 WM_MDICASCADE = 0x0227
377 WM_MDIICONARRANGE = 0x0228
378 WM_MDIGETACTIVE = 0x0229
379 WM_MDIREFRESHMENU = 0x0234
380 WM_DROPOBJECT = 0x022A
381 WM_QUERYDROPOBJECT = 0x022B
382 WM_BEGINDRAG = 0x022C
383 WM_DRAGLOOP = 0x022D
384 WM_DRAGSELECT = 0x022E
385 WM_DRAGMOVE = 0x022F
386 WM_MDISETMENU = 0x0230
387 WM_ENTERSIZEMOVE = 0x0231
388 WM_EXITSIZEMOVE = 0x0232
389 WM_DROPFILES = 0x0233
390 WM_IME_SETCONTEXT = 0x0281
391 WM_IME_NOTIFY = 0x0282
392 WM_IME_CONTROL = 0x0283
393 WM_IME_COMPOSITIONFULL = 0x0284
394 WM_IME_SELECT = 0x0285
395 WM_IME_CHAR = 0x0286
396 WM_IME_REQUEST = 0x0288
397 WM_IME_KEYDOWN = 0x0290
398 WM_IME_KEYUP = 0x0291
399 WM_NCMOUSEHOVER = 0x02A0
400 WM_MOUSEHOVER = 0x02A1
401 WM_MOUSELEAVE = 0x02A3
402 WM_NCMOUSELEAVE = 0x02A2
403 WM_WTSSESSION_CHANGE = 0x02B1
404 WM_TABLET_FIRST = 0x02c0
405 WM_TABLET_LAST = 0x02df
406 WM_CUT = 0x0300
407 WM_COPY = 0x0301
408 WM_PASTE = 0x0302
409 WM_CLEAR = 0x0303
410 WM_UNDO = 0x0304
411 WM_RENDERFORMAT = 0x0305
412 WM_RENDERALLFORMATS = 0x0306
413 WM_DESTROYCLIPBOARD = 0x0307
414 WM_DRAWCLIPBOARD = 0x0308
415 WM_PAINTCLIPBOARD = 0x0309
416 WM_VSCROLLCLIPBOARD = 0x030A
417 WM_SIZECLIPBOARD = 0x030B
418 WM_ASKCBFORMATNAME = 0x030C
419 WM_CHANGECBCHAIN = 0x030D
420 WM_HSCROLLCLIPBOARD = 0x030E
421 WM_QUERYNEWPALETTE = 0x030F
422 WM_PALETTEISCHANGING = 0x0310
423 WM_PALETTECHANGED = 0x0311
424 WM_HOTKEY = 0x0312
425 WM_PRINT = 0x0317
426 WM_PRINTCLIENT = 0x0318
427 WM_APPCOMMAND = 0x0319
428 WM_THEMECHANGED = 0x031A
429 WM_CLIPBOARDUPDATE = 0x031D
430 WM_DWMCOMPOSITIONCHANGED = 0x031E
431 WM_DWMNCRENDERINGCHANGED = 0x031F
432 WM_DWMCOLORIZATIONCOLORCHANGED = 0x0320
433 WM_DWMWINDOWMAXIMIZEDCHANGE = 0x0321
434 WM_GETTITLEBARINFOEX = 0x033F
435 WM_HANDHELDFIRST = 0x0358
436 WM_HANDHELDLAST = 0x035F
437 WM_AFXFIRST = 0x0360
438 WM_AFXLAST = 0x037F
439 WM_PENWINFIRST = 0x0380
440 WM_PENWINLAST = 0x038F
441 WM_USER = 0x0400
442 WM_APP = 0x8000