[EMAIL PROTECTED] schrieb:
> [EMAIL PROTECTED] schrieb:
> 
>> Does anyone know of a way to read text labels from a Win32 application.
>> I am familiar with using pywin32 and the SendMessage function to
>> capture text from Buttons,text boxex, comboboxes, etc, however, the
>> text I am would like to capture doesn't appear to be in a control.
> 
> 
> This article tells the whole story
> 
> "The secret life of GetWindowText"
> http://blogs.msdn.com/oldnewthing/archive/2003/08/21/54675.aspx

Appended is a script that is a fairly straight-forward conversion of the
code in the above article to Python.  Needs ctypes and comtypes.

Python 2.5 already includes ctypes; comtypes can be installed
with 'easy_install comtypes'.

Thomas
import sys, time
from ctypes import windll, oledll, WinError, byref, POINTER
from ctypes.wintypes import POINT

from comtypes import COMError
from comtypes.automation import VARIANT
from comtypes.client import GetModule

# create wrapper for the oleacc.dll type library
GetModule("oleacc.dll")
# import the interface we need from the wrapper
from comtypes.gen.Accessibility import IAccessible

def GetCursorPos():
    "Return the cursor coordinates"
    pt = POINT()
    if not windll.user32.GetCursorPos(byref(pt)):
        raise WinError()
    return pt.x, pt.y

def AccessibleObjectFromPoint(x, y):
    "Return an accessible object and an index. See MSDN for details."
    pacc = POINTER(IAccessible)()
    var = VARIANT()
    oledll.oleacc.AccessibleObjectFromPoint(POINT(x, y), byref(pacc), 
byref(var))
    return pacc, var

if __name__ == "__main__":
    while 1:
        time.sleep(1)
        x, y = GetCursorPos()

        try:
            pacc, index = AccessibleObjectFromPoint(x, y)
            name = pacc.accName[index]
        except (WindowsError, COMError), details:
            print details
            continue
        if name is not None:
            print "===", (x, y), "=" * 60
            print name.encode(sys.stdout.encoding, "backslashreplace")
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to