Module winUser
[hide private]
[frames] | no frames]

Source Code for Module winUser

  1  #winUser.py 
  2  #A part of NonVisual Desktop Access (NVDA) 
  3  #Copyright (C) 2006-2007 NVDA Contributors <http://www.nvda-project.org/> 
  4  #This file is covered by the GNU General Public License. 
  5  #See the file COPYING for more details. 
  6   
  7  """Functions that wrap Windows API functions from user32.dll""" 
  8   
  9  from ctypes import * 
 10  from ctypes.wintypes import * 
 11   
 12  #dll handles 
 13  user32=windll.user32 
 14   
 15  LRESULT=c_long 
 16  HCURSOR=c_long 
 17   
 18  #Standard window class stuff 
 19   
 20  WNDPROC=WINFUNCTYPE(LRESULT,HWND,c_uint,WPARAM,LPARAM) 
 21   
22 -class WNDCLASSEXW(Structure):
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
38 -class NMHdrStruct(Structure):
39 _fields_=[ 40 ('hwndFrom',HWND), 41 ('idFrom',c_uint), 42 ('code',c_uint), 43 ]
44
45 -class GUITHREADINFO(Structure):
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 #constants 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 #PeekMessage 99 PM_REMOVE=1 100 PM_NOYIELD=2 101 #sendMessageTimeout 102 SMTO_ABORTIFHUNG=0x0002 103 #getAncestor 104 GA_PARENT=1 105 GA_ROOT=2 106 GA_ROOTOWNER=3 107 #getWindowLong 108 GWL_ID=-12 109 GWL_STYLE=-16 110 #getWindow 111 GW_HWNDNEXT=2 112 GW_HWNDPREV=3 113 GW_OWNER=4 114 #Window messages 115 WM_GETTEXT=13 116 WM_GETTEXTLENGTH=14 117 WM_PAINT=0x000F 118 WM_GETOBJECT=0x003D 119 #Clipboard formats 120 CF_TEXT=1 121 #mapVirtualKey constants 122 MAPVK_VK_TO_CHAR=2 123 #Virtual key codes 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 #Windows hooks 218 WH_KEYBOARD=2 219 WH_MOUSE=7 220 #win events 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 #IAccessible Child IDs 277 CHILDID_SELF=0 278 #IAccessible Object IDs 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 # ShowWindow() commands 294 SW_HIDE = 0 295 SW_SHOWNORMAL = 1 296 297 # RedrawWindow() flags 298 RDW_INVALIDATE = 0x0001 299 RDW_UPDATENOW = 0x0100 300
301 -def setSystemScreenReaderFlag(val):
302 user32.SystemParametersInfoW(SPI_SETSCREENREADER,val,0,SPIF_UPDATEINIFILE|SPIF_SENDCHANGE)
303
304 -def getSystemScreenReaderFlag():
305 val = BOOL() 306 user32.SystemParametersInfoW(SPI_GETSCREENREADER, 0, byref(val), 0) 307 return bool(val.value)
308
309 -def LOBYTE(word):
310 return word&0xFF
311
312 -def HIBYTE(word):
313 return word>>8
314
315 -def MAKEWORD(lo,hi):
316 return (hi<<8)+lo
317
318 -def LOWORD(long):
319 return long&0xFFFF
320
321 -def HIWORD(long):
322 return long>>16
323
324 -def MAKELONG(lo,hi):
325 return (hi<<16)+lo
326
327 -def waitMessage():
328 return user32.WaitMessage()
329
330 -def getMessage(*args):
331 return user32.GetMessageW(*args)
332
333 -def translateMessage(*args):
334 return user32.TranslateMessage(*args)
335
336 -def dispatchMessage(*args):
337 return user32.DispatchMessageW(*args)
338
339 -def peekMessage(*args):
340 try: 341 res=user32.PeekMessageW(*args) 342 except: 343 res=0 344 return res
345
346 -def registerWindowMessage(name):
347 return user32.RegisterWindowMessageW(name)
348
349 -def getAsyncKeyState(v):
350 return user32.GetAsyncKeyState(v)
351
352 -def getKeyState(v):
353 return user32.GetKeyState(v)
354
355 -def isWindow(hwnd):
356 return user32.IsWindow(hwnd)
357
358 -def isDescendantWindow(parentHwnd,childHwnd):
359 if (parentHwnd==childHwnd) or user32.IsChild(parentHwnd,childHwnd): 360 return True 361 else: 362 return False
363
364 -def getForegroundWindow():
365 return user32.GetForegroundWindow()
366
367 -def setForegroundWindow(hwnd):
368 user32.SetForegroundWindow(hwnd)
369
370 -def setFocus(hwnd):
371 user32.SetFocus(hwnd)
372
373 -def getDesktopWindow():
374 return user32.GetDesktopWindow()
375
376 -def getControlID(hwnd):
377 return user32.GetWindowLongW(hwnd,GWL_ID)
378 379
380 -def getClientRect(hwnd):
381 return user32.GetClientRect(hwnd)
382 383 HWINEVENTHOOK=HANDLE 384 385 WINEVENTPROC=WINFUNCTYPE(None,HWINEVENTHOOK,DWORD,HWND,c_long,c_long,DWORD,DWORD) 386
387 -def setWinEventHook(*args):
388 return user32.SetWinEventHook(*args)
389
390 -def unhookWinEvent(*args):
391 return user32.UnhookWinEvent(*args)
392
393 -def sendMessage(hwnd,msg,param1,param2):
394 return user32.SendMessageW(hwnd,msg,param1,param2)
395
396 -def getWindowThreadProcessID(hwnd):
397 processID=c_int() 398 threadID=user32.GetWindowThreadProcessId(hwnd,byref(processID)) 399 return (processID.value,threadID)
400
401 -def getClassName(window):
402 buf=create_unicode_buffer(256) 403 user32.GetClassNameW(window,buf,255) 404 return buf.value
405
406 -def keybd_event(*args):
407 return user32.keybd_event(*args)
408
409 -def mouse_event(*args):
410 return user32.mouse_event(*args)
411
412 -def getAncestor(hwnd,flags):
413 return user32.GetAncestor(hwnd,flags)
414
415 -def setCursorPos(x,y):
416 user32.SetCursorPos(x,y)
417
418 -def getCursorPos():
419 point=POINT() 420 user32.GetCursorPos(byref(point)) 421 return [point.x,point.y]
422
423 -def getCaretPos():
424 point=POINT() 425 user32.GetCaretPos(byref(point)) 426 return [point.x,point.y]
427
428 -def getTopWindow(hwnd):
429 return user32.GetTopWindow(hwnd)
430
431 -def getWindowText(hwnd):
432 buf=create_unicode_buffer(1024) 433 user32.InternalGetWindowText(hwnd,buf,1023) 434 return buf.value
435
436 -def getWindow(window,relation):
437 return user32.GetWindow(window,relation)
438
439 -def isWindowVisible(window):
440 return bool(user32.IsWindowVisible(window))
441
442 -def isWindowEnabled(window):
443 return bool(user32.IsWindowEnabled(window))
444
445 -def getGUIThreadInfo(threadID):
446 info=GUITHREADINFO(cbSize=sizeof(GUITHREADINFO)) 447 user32.GetGUIThreadInfo(threadID,byref(info)) 448 return info
449
450 -def getWindowStyle(hwnd):
451 return user32.GetWindowLongW(hwnd,GWL_STYLE)
452
453 -def getPreviousWindow(hwnd):
454 try: 455 return user32.GetWindow(hwnd,GW_HWNDPREV) 456 except WindowsError: 457 return 0
458
459 -def getKeyboardLayout(idThread=0):
460 return user32.GetKeyboardLayout(idThread)
461 462
463 -def RedrawWindow(hwnd, rcUpdate, rgnUpdate, flags):
464 return user32.RedrawWindow(hwnd, byref(rcUpdate), rgnUpdate, flags)
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
471 -def FindWindow(className, windowName):
472 res = user32.FindWindowW(className, windowName) 473 if res == 0: 474 raise WinError() 475 return res
476
477 -def MessageBox(hwnd, text, caption, type):
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
488 -def VkKeyScan(ch):
489 res = user32.VkKeyScanW(WCHAR(ch)) 490 if res == -1: 491 raise LookupError 492 return res >> 8, res & 0xFF
493
494 -def ScreenToClient(hwnd, x, y):
495 point = POINT(x, y) 496 user32.ScreenToClient(hwnd, byref(point)) 497 return point.x, point.y
498