1
2
3
4
5
6
7 """Functions that wrap Windows API functions from user32.dll"""
8
9 from ctypes import *
10 from ctypes.wintypes import *
11
12
13 user32=windll.user32
14
15 LRESULT=c_long
16 HCURSOR=c_long
17
18
19
20 WNDPROC=WINFUNCTYPE(LRESULT,HWND,c_uint,WPARAM,LPARAM)
21
23 _fields_=[
24 ('cbSize',c_uint),
25 ('style',c_uint),
26 ('lpfnWndProc',WNDPROC),
27 ('cbClsExtra',c_int),
28 ('cbWndExtra',c_int),
29 ('hInstance',HINSTANCE),
30 ('hIcon',HICON),
31 ('HCURSOR',HCURSOR),
32 ('hbrBackground',HBRUSH),
33 ('lpszMenuName',LPWSTR),
34 ('lpszClassName',LPWSTR),
35 ('hIconSm',HICON),
36 ]
37
39 _fields_=[
40 ('hwndFrom',HWND),
41 ('idFrom',c_uint),
42 ('code',c_uint),
43 ]
44
46 _fields_=[
47 ('cbSize',DWORD),
48 ('flags',DWORD),
49 ('hwndActive',HWND),
50 ('hwndFocus',HWND),
51 ('hwndCapture',HWND),
52 ('hwndMenuOwner',HWND),
53 ('hwndMoveSize',HWND),
54 ('hwndCaret',HWND),
55 ('rcCaret',RECT),
56 ]
57
58
59 MOUSEEVENTF_LEFTDOWN=0x0002
60 MOUSEEVENTF_LEFTUP=0x0004
61 MOUSEEVENTF_RIGHTDOWN=0x0008
62 MOUSEEVENTF_RIGHTUP=0x0010
63 MOUSEEVENTF_MIDDLEDOWN=0x0020
64 MOUSEEVENTF_MIDDLEUP=0x0040
65 MOUSEEVENTF_XDOWN=0x0080
66 MOUSEEVENTF_XUP=0x0100
67 GUI_CARETBLINKING=0x00000001
68 GUI_INMOVESIZE=0x00000002
69 GUI_INMENUMODE=0x00000004
70 GUI_SYSTEMMENUMODE=0x00000008
71 GUI_POPUPMENUMODE=0x00000010
72 SPI_GETSCREENREADER=70
73 SPI_SETSCREENREADER=71
74 SPIF_UPDATEINIFILE=1
75 SPIF_SENDCHANGE=2
76 WS_DISABLED=0x8000000
77 WS_VISIBLE=0x10000000
78 WS_POPUP=0x80000000
79 WS_GROUP=0x20000
80 WS_THICKFRAME=0x40000
81 WS_SIZEBOX=WS_THICKFRAME
82 WS_SYSMENU=0x80000
83 WS_HSCROLL=0x100000
84 WS_VSCROLL=0x200000
85 WS_CAPTION=0xC00000
86 BS_GROUPBOX=7
87 ES_MULTILINE=4
88 LBS_OWNERDRAWFIXED=0x0010
89 LBS_OWNERDRAWVARIABLE=0x0020
90 LBS_HASSTRINGS=0x0040
91 CBS_OWNERDRAWFIXED=0x0010
92 CBS_OWNERDRAWVARIABLE=0x0020
93 CBS_HASSTRINGS=0x00200
94 WM_NULL=0
95 WM_COPYDATA=74
96 WM_NOTIFY=78
97 WM_USER=1024
98
99 PM_REMOVE=1
100 PM_NOYIELD=2
101
102 SMTO_ABORTIFHUNG=0x0002
103
104 GA_PARENT=1
105 GA_ROOT=2
106 GA_ROOTOWNER=3
107
108 GWL_ID=-12
109 GWL_STYLE=-16
110
111 GW_HWNDNEXT=2
112 GW_HWNDPREV=3
113 GW_OWNER=4
114
115 WM_GETTEXT=13
116 WM_GETTEXTLENGTH=14
117 WM_PAINT=0x000F
118 WM_GETOBJECT=0x003D
119
120 CF_TEXT=1
121
122 MAPVK_VK_TO_CHAR=2
123
124 VK_LBUTTON=1
125 VK_RBUTTON=2
126 VK_CANCEL=3
127 VK_MBUTTON=4
128 VK_XBUTTON=15
129 VK_XBUTTON=26
130 VK_BACK=8
131 VK_TAB=9
132 VK_CLEAR=12
133 VK_RETURN=13
134 VK_SHIFT=16
135 VK_CONTROL=17
136 VK_MENU=18
137 VK_PAUSE=19
138 VK_CAPITAL=20
139 VK_FINAL=0x18
140 VK_ESCAPE=0x1B
141 VK_CONVERT=0x1C
142 VK_NONCONVERT=0x1D
143 VK_ACCEPT=0x1E
144 VK_MODECHANGE=0x1F
145 VK_SPACE=32
146 VK_PRIOR=33
147 VK_NEXT=34
148 VK_END=35
149 VK_HOME=36
150 VK_LEFT=37
151 VK_UP=38
152 VK_RIGHT=39
153 VK_DOWN=40
154 VK_SELECT=41
155 VK_PRINT=42
156 VK_EXECUTE=43
157 VK_SNAPSHOT=44
158 VK_INSERT=45
159 VK_DELETE=46
160 VK_HELP=47
161 VK_LWIN=0x5B
162 VK_RWIN=0x5C
163 VK_APPS=0x5D
164 VK_SLEEP=0x5F
165 VK_NUMPAD0=0x60
166 VK_NUMPAD1=0x61
167 VK_NUMPAD2=0x62
168 VK_NUMPAD3=0x63
169 VK_NUMPAD4=0x64
170 VK_NUMPAD5=0x65
171 VK_NUMPAD6=0x66
172 VK_NUMPAD7=0x67
173 VK_NUMPAD8=0x68
174 VK_NUMPAD9=0x69
175 VK_MULTIPLY=0x6A
176 VK_ADD=0x6B
177 VK_SEPARATOR=0x6C
178 VK_SUBTRACT=0x6D
179 VK_DECIMAL=0x6E
180 VK_DIVIDE=0x6F
181 VK_F1=0x70
182 VK_F2=0x71
183 VK_F3=0x72
184 VK_F4=0x73
185 VK_F5=0x74
186 VK_F6=0x75
187 VK_F7=0x76
188 VK_F8=0x77
189 VK_F9=0x78
190 VK_F10=0x79
191 VK_F11=0x7A
192 VK_F12=0x7B
193 VK_F13=0x7C
194 VK_F14=0x7D
195 VK_F15=0x7E
196 VK_F16=0x7F
197 VK_F17=0x80
198 VK_F18=0x81
199 VK_F19=0x82
200 VK_F20=0x83
201 VK_F21=0x84
202 VK_F22=0x85
203 VK_F23=0x86
204 VK_F24=0x87
205 VK_NUMLOCK=0x90
206 VK_SCROLL=0x91
207 VK_LSHIFT=0xA0
208 VK_RSHIFT=0xA1
209 VK_LCONTROL=0xA2
210 VK_RCONTROL=0xA3
211 VK_LMENU=0xA4
212 VK_RMENU=0xA5
213 VK_VOLUME_MUTE=0xAD
214 VK_VOLUME_DOWN=0xAE
215 VK_VOLUME_UP=0xAF
216
217
218 WH_KEYBOARD=2
219 WH_MOUSE=7
220
221 EVENT_SYSTEM_SOUND=0x1
222 EVENT_SYSTEM_ALERT=0x2
223 EVENT_SYSTEM_FOREGROUND=0x3
224 EVENT_SYSTEM_MENUSTART=0x4
225 EVENT_SYSTEM_MENUEND=0x5
226 EVENT_SYSTEM_MENUPOPUPSTART=0x6
227 EVENT_SYSTEM_MENUPOPUPEND=0x7
228 EVENT_SYSTEM_CAPTURESTART=0x8
229 EVENT_SYSTEM_CAPTUREEND=0x9
230 EVENT_SYSTEM_MOVESIZESTART=0xa
231 EVENT_SYSTEM_MOVESIZEEND=0xb
232 EVENT_SYSTEM_CONTEXTHELPSTART=0xc
233 EVENT_SYSTEM_CONTEXTHELPEND=0xd
234 EVENT_SYSTEM_DRAGDROPSTART=0xe
235 EVENT_SYSTEM_DRAGDROPEND=0xf
236 EVENT_SYSTEM_DIALOGSTART=0x10
237 EVENT_SYSTEM_DIALOGEND=0x11
238 EVENT_SYSTEM_SCROLLINGSTART=0x12
239 EVENT_SYSTEM_SCROLLINGEND=0x13
240 EVENT_SYSTEM_SWITCHSTART=0x14
241 EVENT_SYSTEM_SWITCHEND=0x15
242 EVENT_SYSTEM_MINIMIZESTART=0x16
243 EVENT_SYSTEM_MINIMIZEEND=0x17
244 EVENT_OBJECT_CREATE=0x8000
245 EVENT_OBJECT_DESTROY=0x8001
246 EVENT_OBJECT_SHOW=0x8002
247 EVENT_OBJECT_HIDE=0x8003
248 EVENT_OBJECT_REORDER=0x8004
249 EVENT_OBJECT_FOCUS=0x8005
250 EVENT_OBJECT_SELECTION=0x8006
251 EVENT_OBJECT_SELECTIONADD=0x8007
252 EVENT_OBJECT_SELECTIONREMOVE=0x8008
253 EVENT_OBJECT_SELECTIONWITHIN=0x8009
254 EVENT_OBJECT_STATECHANGE=0x800a
255 EVENT_OBJECT_LOCATIONCHANGE=0x800b
256 EVENT_OBJECT_NAMECHANGE=0x800c
257 EVENT_OBJECT_DESCRIPTIONCHANGE=0x800d
258 EVENT_OBJECT_VALUECHANGE=0x800e
259 EVENT_OBJECT_PARENTCHANGE=0x800f
260 EVENT_OBJECT_HELPCHANGE=0x8010
261 EVENT_OBJECT_DEFACTIONCHANGE=0x8011
262 EVENT_OBJECT_ACCELERATORCHANGE=0x8012
263
264 EVENT_SYSTEM_DESKTOPSWITCH=0x20
265 EVENT_OBJECT_INVOKED=0x8013
266 EVENT_OBJECT_TEXTSELECTIONCHANGED=0x8014
267 EVENT_OBJECT_CONTENTSCROLLED=0x8015
268
269 EVENT_CONSOLE_CARET=0x4001
270 EVENT_CONSOLE_UPDATE_REGION=0x4002
271 EVENT_CONSOLE_UPDATE_SIMPLE=0x4003
272 EVENT_CONSOLE_UPDATE_SCROLL=0x4004
273 EVENT_CONSOLE_LAYOUT=0x4005
274 EVENT_CONSOLE_START_APPLICATION=0x4006
275 EVENT_CONSOLE_END_APPLICATION=0x4007
276
277 CHILDID_SELF=0
278
279 OBJID_WINDOW=0
280 OBJID_SYSMENU=-1
281 OBJID_TITLEBAR=-2
282 OBJID_MENU=-3
283 OBJID_CLIENT=-4
284 OBJID_VSCROLL=-5
285 OBJID_HSCROLL=-6
286 OBJID_SIZEGRIP=-7
287 OBJID_CARET=-8
288 OBJID_CURSOR=-9
289 OBJID_ALERT=-10
290 OBJID_SOUND=-11
291 OBJID_NATIVEOM=-16
292
293
294 SW_HIDE = 0
295 SW_SHOWNORMAL = 1
296
297
298 RDW_INVALIDATE = 0x0001
299 RDW_UPDATENOW = 0x0100
300
303
308
311
314
317
320
323
326
328 return user32.WaitMessage()
329
331 return user32.GetMessageW(*args)
332
334 return user32.TranslateMessage(*args)
335
337 return user32.DispatchMessageW(*args)
338
340 try:
341 res=user32.PeekMessageW(*args)
342 except:
343 res=0
344 return res
345
348
350 return user32.GetAsyncKeyState(v)
351
353 return user32.GetKeyState(v)
354
357
359 if (parentHwnd==childHwnd) or user32.IsChild(parentHwnd,childHwnd):
360 return True
361 else:
362 return False
363
365 return user32.GetForegroundWindow()
366
369
372
374 return user32.GetDesktopWindow()
375
378
379
382
383 HWINEVENTHOOK=HANDLE
384
385 WINEVENTPROC=WINFUNCTYPE(None,HWINEVENTHOOK,DWORD,HWND,c_long,c_long,DWORD,DWORD)
386
388 return user32.SetWinEventHook(*args)
389
391 return user32.UnhookWinEvent(*args)
392
394 return user32.SendMessageW(hwnd,msg,param1,param2)
395
397 processID=c_int()
398 threadID=user32.GetWindowThreadProcessId(hwnd,byref(processID))
399 return (processID.value,threadID)
400
402 buf=create_unicode_buffer(256)
403 user32.GetClassNameW(window,buf,255)
404 return buf.value
405
408
411
414
417
419 point=POINT()
420 user32.GetCursorPos(byref(point))
421 return [point.x,point.y]
422
424 point=POINT()
425 user32.GetCaretPos(byref(point))
426 return [point.x,point.y]
427
430
431 -def getWindowText(hwnd):
432 buf=create_unicode_buffer(1024)
433 user32.InternalGetWindowText(hwnd,buf,1023)
434 return buf.value
435
438
441
444
449
452
458
460 return user32.GetKeyboardLayout(idThread)
461
462
465
466 -def getKeyNameText(scanCode,extended):
467 buf=create_unicode_buffer(32)
468 user32.GetKeyNameTextW((scanCode<<16)|(extended<<24),buf,31)
469 return buf.value
470
472 res = user32.FindWindowW(className, windowName)
473 if res == 0:
474 raise WinError()
475 return res
476
478 res = user32.MessageBoxW(hwnd, text, caption, type)
479 if res == 0:
480 raise WinError()
481 return res
482
483 -def PostMessage(hwnd, msg, wParam, lParam):
484 if not user32.PostMessageW(hwnd, msg, wParam, lParam):
485 raise WinError()
486
487 user32.VkKeyScanW.restype = SHORT
489 res = user32.VkKeyScanW(WCHAR(ch))
490 if res == -1:
491 raise LookupError
492 return res >> 8, res & 0xFF
493
498