Получить текст из всплывающего окна - PullRequest
9 голосов
/ 03 мая 2011

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

errors

Название всегда одинаковое.Мне удалось определить 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)

Ответы [ 2 ]

5 голосов
/ 03 мая 2011

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

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

4 голосов
/ 03 мая 2011

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

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

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

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

...