Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get text from popup window

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)
like image 525
Jesse Aldridge Avatar asked May 02 '11 21:05

Jesse Aldridge


2 Answers

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).

like image 91
David Heffernan Avatar answered Oct 15 '22 10:10

David Heffernan


I don't have access to the framework or the error dialog you are using, so I can only say in general what you want.

You need the FindWindowEx function, and use it to find a control whose class name is 'static' (or whatever the class name of the control is). I imagine this would be the line:

control = win32gui.FindWindowEx(window, 0, "Static", 0)

That returns the handle to the control, and you can then use GetWindowText on that to get the text.

like image 43
Matt Avatar answered Oct 15 '22 09:10

Matt