2010-12-12 8 views
1

Voici ma fonction:Comment puis-je obtenir un texte à partir d'une fenêtre?

def getEditText(hwnd): 
    result = [] 
    bufferlength = struct.pack('i', 255) 
    linecount = win32gui.SendMessage(hwnd, win32con.EM_GETLINECOUNT, 0, 0) 
    print"--- linecount :",linecount 

    for line in range(linecount): 
     linetext = bufferlength + "".ljust(253)   
     linelength = win32gui.SendMessage(hwnd, win32con.EM_GETLINE, line, linetext) 
myLigne=linetext[:linelength] 
print" ",myLigne 
     result.append(myLigne) 
    return result 
resultat=getEditText(hwmdTexte) 

Je veux obtenir le texte d'un widget, mais cela ne fonctionne pas. Il y a plusieurs lignes dans le widget de mon application mais j'ai linecount = 0 et bien sûr pas de texte ... Pourriez-vous m'aider s'il vous plait.

+1

1. Le formatage semble cassé. 2. Quel widget, avec quel toolkit GUI, etc.? – delnan

+0

Tout d'abord, vérifiez que votre 'hwnd' fait référence à un contrôle d'édition (et non à une fenêtre contenant un contrôle d'édition, etc.). Utilisez Spy ++ ou un outil similaire pour confirmer vos hypothèses. – atzz

+0

Merci pour votre réponse. Je pense aussi qu'il y a un problème avec le contrôle. Cependant, je l'ai vérifié avec 2 outils différents (WinID et AutoIt). Le nom du contrôle est TEXTE. De plus j'ai essayé une boucle for, juste au cas où. pour handle, nom, classe dans les contrôles: resultat = GetTex (handle) Il y a une autre chose que je ne comprends pas: pourquoi avec WinID et AutoIt je peux obtenir le texte d'une application mais pas avec celui-ci ... – chris33

Répondre

0

Merci pour votre réponse. Je viens d'essayer def

GetText(hwnd): 
    buf_size = 1 + win32gui.SendMessage(hwnd, win32con.WM_GETTEXTLENGTH, 0, 0) 
    buffer = win32gui.PyMakeBuffer(buf_size) 
    win32gui.SendMessage(hwnd, win32con.WM_GETTEXT, buf_size, buffer) 
    return buffer[:buf_size]  

Mais cela n'obtient pas le texte de mon widget. Cette fonction renvoie NUL ...

Questions connexes