Obtenez le texte de la fenêtre pop-up
Question
Je suis en train de lire le texte à partir d'une fenêtre pop-up.
Le titre est toujours le même. J'ai réussi à identifier le hwnd et obtenir le titre avec le code ci-dessous, mais je ne peux pas comprendre comment lire le contenu.
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)
Voici la version de travail:
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)
La solution
Je n'ai pas accès au cadre ou la boîte de dialogue d'erreur que vous utilisez, donc je ne peux dire en général ce que vous voulez.
Vous avez besoin de la fonction FindWindowEx , et l'utiliser pour trouver un contrôle dont le nom de classe est « statique » (ou quel que soit le nom de la classe du contrôle est). J'imagine que ce serait la ligne:
control = win32gui.FindWindowEx(window, 0, "Static", 0)
qui retourne la poignée à la commande, et vous pouvez ensuite utiliser GetWindowText sur cela pour obtenir le texte.
Autres conseils
Vous ne pourrez lire ce texte si programme il est contenu dans un contrôle fenêtré. Vous pouvez facilement vérifier avec Spy ++. De nombreux cadres de l'interface graphique ne pas utiliser les contrôles fenêtrés pour leurs contrôles enfants, ou seulement utiliser des contrôles fenêtrés pour certains enfants.
S'il est un contrôle fenêtré vous pouvez alors identifier en appelant GetWindow()
et la marche de la structure de l'enfant (de toute évidence, vous devez utiliser l'équivalent win32gui).