Bonjour à tous,

Voici mon script (ou plutôt un script en grande partie pompé sur le net) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# -*- coding: utf-8*-
 
import os
import struct
import win32con
import win32gui
import time
 
 
def findControl(topHwnd,wantedText=None,wantedClass=None,selectionFunction=None):
    childWindows=[] #
    try:
        win32gui.EnumChildWindows(topHwnd,_windowEnumerationHandler,childWindows)
    except:
         print"!!!!!!!!!!!!!!! LE CONTROLE N'EST PEUT-ETRE PAS UN CONTAINER! "
         return childWindows 
    return childWindows
 
def findTopWindow(wantedText=None, wantedClass=None):
    topWindows = []
    win32gui.EnumWindows(_windowEnumerationHandler, topWindows)
    for hwnd, windowText, windowClass in topWindows:
        if wantedText and not windowText.startswith(wantedText):
            continue
        if wantedClass and not windowClass == wantedClass:
            continue
        return hwnd
 
 
def _windowEnumerationHandler(hwnd, resultList):
    resultList.append((hwnd,win32gui.GetWindowText(hwnd),win32gui.GetClassName(hwnd)))
 
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)
	maLigne=linetext[:linelength]	
	print"  ",maLigne
        result.append(maLigne)
    return result
 
 
 
if __name__ == '__main__':
    import win32api 
    liste=[]
    ### 1/ Ouvrir monApplication:    
    os.startfile("C:\Program Files\Harrap's Multimꥩa\Shorter\Bin\HIHarrapsExplorer")
    win32api.Sleep(10) 
 
    ### 2/ Récupérer le handle de monApplication:
    monApplication= win32gui.FindWindow("#32770",None)
    print"--- monApplication :",monApplication
    time.sleep(2)    
 
    ### 3/ Tous les controles de monApplication::
    controls = findControl(monApplication)
    print"Liste de tous les controls de monApplication :"
    hwmdTexte=''
    for handle,nom,classe in controls:
        resultat=getEditText(handle)
        print handle, nom, classe
        if nom=="texte":   
		hwmdTexte=handle		
    resultat=getEditText(hwmdTexte)
Ce script fonctionne parfaitement car je l’ai testé avec un de mes logiciels et j’arrive à obtenir le texte contenu dans un widget nommé « REGEDIT ».

Cependant, je voudrais l’utiliser avec un autre logiciel. Je voudrais obtenir le texte contenu dans un widget nommé "TEXTE". Et là c’est impossible. Je n'ai pas de message d'erreur mais je n'obtiens pas le texte du widget concerné.
En fait, l’erreur se situe dans la fonction getEditText() avec
linecount = win32gui.SendMessage(hwnd, win32con.EM_GETLINECOUNT, 0, 0)
où linecount est toujours = 0.
Je ne comprends pas pourquoi…
D'avance merci à qui pourra m'aider.