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
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.
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
44 BSM_ALLCOMPONENTS
= 0x00000000
46 BSM_NETDRIVER
= 0x00000002
47 BSM_INSTALLABLEDRIVERS
= 0x00000004
48 BSM_APPLICATIONS
= 0x00000008
49 BSM_ALLDESKTOPS
= 0x00000010
53 QS_MOUSEBUTTON
= 0x0004
54 QS_MOUSE
= (QS_MOUSEMOVE | QS_MOUSEBUTTON
)
55 QS_POSTMESSAGE
= 0x0008
58 QS_SENDMESSAGE
= 0x0040
60 QS_ALLPOSTMESSAGE
= 0x0100
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
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
84 SMTO_ABORTIFHUNG
= 0x0002
85 SMTO_NOTIMEOUTIFNOTHUNG
= 0x0008
87 class BSMINFO(Structure
):
94 PBSMINFO
= POINTER(BSMINFO
)
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
185 """loop() - standard windows main loop
187 Run a message loop until PostQuitMessage() is called, then return the integer value passed to PostQuitMessage()."""
190 result
= GetMessage(byref(msg
), 0, 0, 0)
191 if result
== 0: #got WM_QUIT message
193 elif result
== -1: #error
195 TranslateMessage(byref(msg
))
196 DispatchMessage(byref(msg
))
207 WM_KILLFOCUS
= 0x0008
208 WM_SETVISIBLE
= 0x0009
210 WM_SETREDRAW
= 0x000b
213 WM_GETTEXTLENGTH
= 0x000e
216 WM_QUERYENDSESSION
= 0x0011
218 WM_QUERYOPEN
= 0x0013
219 WM_ERASEBKGND
= 0x0014
220 WM_SYSCOLORCHANGE
= 0x0015
221 WM_ENDSESSION
= 0x0016
222 WM_SYSTEMERROR
= 0x0017
223 WM_SHOWWINDOW
= 0x0018
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
243 WM_MEASUREITEM
= 0x002c
244 WM_DELETEITEM
= 0x002d
245 WM_VKEYTOITEM
= 0x002e
246 WM_CHARTOITEM
= 0x002f
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
258 WM_GETOBJECT
= 0x003d
259 WM_ACTIVATESHELLWINDOW
= 0x003e
260 WM_COMPACTING
= 0x0041
261 WM_COMMNOTIFY
= 0x0044
262 WM_WINDOWPOSCHANGING
= 0x0046
263 WM_WINDOWPOSCHANGED
= 0x0047
266 WM_CANCELJOURNAL
= 0x004b
269 WM_INPUTLANGCHANGEREQUEST
= 0x0050
270 WM_INPUTLANGCHANGE
= 0x0051
273 WM_USERCHANGED
= 0x0054
274 WM_NOTIFYFORMAT
= 0x0055
275 WM_CONTEXTMENU
= 0x007b
276 WM_STYLECHANGING
= 0x007c
277 WM_STYLECHANGED
= 0x007d
278 WM_DISPLAYCHANGE
= 0x007e
282 WM_NCDESTROY
= 0x0082
283 WM_NCCALCSIZE
= 0x0083
284 WM_NCHITTEST
= 0x0084
286 WM_NCACTIVATE
= 0x0086
287 WM_GETDLGCODE
= 0x0087
288 WM_SYNCPAINT
= 0x0088
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
309 WM_SYSKEYDOWN
= 0x0104
312 WM_SYSDEADCHAR
= 0x0107
314 WM_KEYFIRST
= WM_KEYDOWN
316 WM_IME_STARTCOMPOSITION
= 0x010d
317 WM_IME_ENDCOMPOSITION
= 0x010e
318 WM_IME_COMPOSITION
= 0x010f
319 WM_IME_KEYLAST
= 0x010f
320 WM_INITDIALOG
= 0x0110
322 WM_SYSCOMMAND
= 0x0112
327 WM_INITMENUPOPUP
= 0x0117
328 WM_MENUSELECT
= 0x011F
330 WM_ENTERIDLE
= 0x0121
331 WM_MENURBUTTONUP
= 0x0122
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
365 WM_CAPTURECHANGED
= 0x0215
367 WM_POWERBROADCAST
= 0x0218
368 WM_DEVICECHANGE
= 0x0219
369 WM_MDICREATE
= 0x0220
370 WM_MDIDESTROY
= 0x0221
371 WM_MDIACTIVATE
= 0x0222
372 WM_MDIRESTORE
= 0x0223
374 WM_MDIMAXIMIZE
= 0x0225
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
384 WM_DRAGSELECT
= 0x022E
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
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
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
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
439 WM_PENWINFIRST
= 0x0380
440 WM_PENWINLAST
= 0x038F