# Module : winGuiAuto.py
# Synopsis : Windows GUI automation utilities
# Programmer : Simon Brunning - simon@brunningonline.net
# Date : 25 June 2003
# Version : 1.0 pre-alpha 2
# Copyright : Released to the public domain. Provided as-is, with no warranty.
# Notes : Requires Python 2.3, win32all and ctypes
'''Windows GUI automation utilities.
Until I get around to writing some docs and examples, the tests at the foot of
this module should serve to get you started.
'''
import array
import ctypes
import os
import struct
import sys
import win32api
import win32con
import win32gui
def findTopWindow(wantedText=None, wantedClass=None, selectionFunction=None):
'''Find the hwnd of a top level window.
You can identify windows using captions, classes, a custom selection
function, or any combination of these. (Multiple selection criteria are
ANDed. If this isn't what's wanted, use a selection function.)
Arguments:
wantedText Text which the required window's captions must contain.
wantedClass Class to which the required window must belong.
selectionFunction Window selection function. Reference to a function
should be passed here. The function should take hwnd as
an argument, and should return True when passed the
hwnd of a desired window.
Raises:
WinGuiAutoError When no window found.
Usage example: optDialog = findTopWindow(wantedText="Options")
'''
topWindows = findTopWindows(wantedText, wantedClass, selectionFunction)
if topWindows:
return topWindows[0]
else:
raise WinGuiAutoError("No top level window found for wantedText=" +
repr(wantedText) +
", wantedClass=" +
repr(wantedClass) +
", selectionFunction=" +
repr(selectionFunction))
def findTopWindows(wantedText=None, wantedClass=None, selectionFunction=None):
'''Find the hwnd of top level windows.
You can identify windows using captions, classes, a custom selection
function, or any combination of these. (Multiple selection criteria are
ANDed. If this isn't what's wanted, use a selection function.)
Arguments:
wantedText Text which required windows' captions must contain.
wantedClass Class to which required windows must belong.
selectionFunction Window selection function. Reference to a function
should be passed here. The function should take hwnd as
an argument, and should return True when passed the
hwnd of a desired window.
Returns: A list containing the window handles of all top level
windows matching the supplied selection criteria.
Usage example: optDialogs = findTopWindows(wantedText="Options")
'''
results = []
topWindows = []
win32gui.EnumWindows(_windowEnumerationHandler, topWindows)
for hwnd, windowText, windowClass in topWindows:
if wantedText and not _normaliseText(wantedText) in _normaliseText(windowText):
continue
if wantedClass and not windowClass == wantedClass:
continue
if selectionFunction and not selectionFunction(hwnd):
continue
results.append(hwnd)
return results
def dumpWindow(hwnd):
'''Dump all controls from a window into a nested list
Useful during development, allowing to you discover the structure of the
contents of a window, showing the text and class of all contained controls.
Arguments: The window handle of the top level window to dump.
Returns A nested list of controls. Each entry consists of the
control's hwnd, its text, its class, and its sub-controls,
if any.
Usage example: replaceDialog = findTopWindow(wantedText='Replace')
pprint.pprint(dumpWindow(replaceDialog))
'''
windows = []
try:
win32gui.EnumChildWindows(hwnd, _windowEnumerationHandler, windows)
except win32gui.error:
# No child windows
return
windows = [list(window) for window in windows]
for window in windows:
childHwnd, windowText, windowClass = window
window_content = dumpWindow(childHwnd)
if window_content:
window.append(window_content)
return windows
def findControl(topHwnd,
wantedText=None,
wantedClass=None,
selectionFunction=None):
'''Find a control.
You can identify a control using caption, classe, a custom selection
function, or any combination of these. (Multiple selection criteria are
ANDed. If this isn't what's wanted, use a selection function.)
Arguments:
topHwnd The window handle of the top level window in which the
required controls reside.
wantedText Text which the required control's captions must contain.
wantedClass Class to
gipoco.com
is neither affiliated with the authors of this page or responsible
for its contents. This is a safe-cache copy of the original web site.
gipoco.com
is neither affiliated with the authors of this page nor responsible
for its contents. This is a safe-cache copy of the original web site.