Get text from popup window

Jesse Aldridge picture Jesse Aldridge · May 2, 2011 · Viewed 7.9k times · Source

I'm trying to read the text from a popup window.

errors

The title is always the same. I've managed to identify the hwnd and get the title with the code below, but I can't figure out how to read the contents.

import time

import win32gui, win32con


windows = []
def _MyCallback( hwnd, extra ):
  extra.append(hwnd)
win32gui.EnumWindows(_MyCallback, windows)

while True:
  window = win32gui.GetForegroundWindow()
  title = win32gui.GetWindowText(window)
  if title == 'Errors occurred':  print 'error window'
  time.sleep(1)

Here's the working version:

import time

import win32gui

while True:
  window = win32gui.GetForegroundWindow()
  title = win32gui.GetWindowText(window)
  if title == 'Errors occurred':
    control = win32gui.FindWindowEx(window, 0, "static", None)
    print 'text: ', win32gui.GetWindowText(control)
  time.sleep(1)

Answer

David Heffernan picture David Heffernan · May 2, 2011

You will only be able to read this text programmatically if it is contained in a windowed control. You can easily check this with Spy++. Many GUI frameworks don't use windowed controls for their child controls, or only use windowed controls for some children.

If it is a windowed control then you can identify it by calling GetWindow() and walking the child structure (obviously you need to use the win32gui equivalent).