Получить текст из всплывающего окна

Я пытаюсь прочитать текст из всплывающего окна.

ошибки

Заголовок всегда один. Мне удалось определить hwnd и получить заголовок с кодом ниже, но я не могу понять, как прочитать содержимое.

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)

Вот рабочая версия:

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)

person Jesse Aldridge    schedule 02.05.2011    source источник


Ответы (2)


У меня нет доступа к фреймворку или диалоговому окну ошибок, который вы используете, поэтому я могу только в общих чертах сказать, что вы хотите.

Вам понадобится функция FindWindowEx, и используйте ее, чтобы найти элемент управления, класс которого имя "статическое" (или любое другое имя класса элемента управления). Я предполагаю, что это будет строка:

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

Это возвращает дескриптор элемента управления, и затем вы можете использовать для него GetWindowText, чтобы получить текст.

person Matt    schedule 02.05.2011
comment
Да, это помогло. Я разместил рабочий пример в вопросе. Спасибо. - person Jesse Aldridge; 03.05.2011

Вы сможете прочитать этот текст только программно, если он содержится в оконном элементе управления. Вы можете легко проверить это с помощью Spy++. Многие платформы GUI не используют оконные элементы управления для своих дочерних элементов управления или используют оконные элементы управления только для некоторых дочерних элементов.

Если это оконный элемент управления, вы можете определить его, вызвав GetWindow() и обход дочерней структуры (очевидно, вам нужно использовать эквивалент win32gui).

person David Heffernan    schedule 02.05.2011