Recuperer la valeur d'une zone de text sur un logiciel X

cs_Alex001 Messages postés 32 Date d'inscription mercredi 25 juillet 2001 Statut Membre Dernière intervention 20 janvier 2009 - 18 juil. 2002 à 20:42
SR2 Messages postés 46 Date d'inscription samedi 17 juillet 2004 Statut Membre Dernière intervention 25 juillet 2006 - 1 mars 2005 à 22:15
Salut tous le monde,

Ma question !!!

Je voudrais recuperer le contenu d'un controle text sur un logiciel (x) afin de créer un pont vers mon log en fonction du N° de dossier qui se trouve sur le control text de l'application X

Je sais que c'est possible mais je sais pas le faire il me faut un coup de pousse svp .....

Merci d'avance a tous !!!

ALEX001

3 réponses

olidbc Messages postés 20 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 26 juillet 2002
19 juil. 2002 à 23:58
salut,

bon, le principe c'est de récupérer le handle de ton objet textbox pour pouvoir lui envoyer un message lui indiquant de t 'envoyer le texte.

pour ca, tu dispose de quelques API :

FindWindow qui permet de recuperer le handle d'un objet en connaissant son nom ou sa classe.

FindWindowEx quit fait comme FindWindow mais on peu lui spécifier un objet parent et/ou un objet fils a partir duquel commener a chercher.

ces deux la vont servir a récuper le handle de ta fenetre (la calculatrice dans l'exemple) et de l'objet textbox ce cette fenetre.

ensuite, on va utiliser l'API SendMessage pour envoyer un message à l'objet textbox lui indiquant de nous retrouner la taille du texte qu'il contient et pour récuperer ce texte.

si ton appli a été fait avec les composant standard window, l'objet textbox se nome "Edit" mais ce nom peut changer.

Donc avant toute chose il faut te procurer un petit outils qui s'appele "izespy.exe". tu pourra le trouver en faisant une recherche à "izekial" dans la section "Visual Basic" du site www.planet-source-code.com. il te permet de récupere toutes les information de n'importe quel objet de ton environement windows grace a un petit pointeur. tu pour connaitre alors le nom et la classe des différent objets de ton appli.

voila l'exemple avec quelques commentaire.


Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hwndParent As Long, ByVal hwndChildAfter As Long, ByVal lpszClass As String, ByVal lpszWindow As String) As Long

'// ces 2 fonctions permèttent de d'envoyer un message à un objet window
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lparam As Long) As Long
Public Declare Function SendMessageByString Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lparam As String) As Long

Public Const WM_GETTEXTLENGTH = &HE
Public Const WM_GETTEXT = &HD

Sub Main()

Dim hForm As Long   '// le handle de la fenetre dans laquelle on veut chercher le textbox.
Dim hEdit As Long   '// le handle de l'objet textbox rechercher.
Dim txtBuffer As String '// le buffer pour récuperer le texte
Dim szText As Long  '// et la taille du buffer

'// en premier en recherche le handle de la fenêtre "Calculatrice" par son nom
hForm = FindWindow(vbNullString, "Calculatrice")
If hForm > 0 Then '// si on le trouve, on continue, sinon, c'est que la calculatrice n'est pas en cours d'execution.
 '// on récupère maintenant handle du 1ier objet "Edit" (notre textbox) de la fenêtre calculatrice.
 hEdit = FindWindowEx(hForm, 0&, "Edit", vbNullString)
 '// tout dabord, on recupère la taille du texte contenu dans l'objet "Edit" dans szTxt
 szText = SendMessage(hEdit, WM_GETTEXTLENGTH, 0&, 0&)
 '// ensuite on prépare le buffer qui va recupérer le texte
 txtBuffer = String(szText, 0&)
 '// et on récupère le texte ...
 Call SendMessageByString(hEdit, WM_GETTEXT, szText + 1&, txtBuffer)
 
 MsgBox txtBuffer
End If

End Sub

0
olidbc Messages postés 20 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 26 juillet 2002
20 juil. 2002 à 00:03
Encore deux petit truc :

l'exemple récupere la valeur de la zone de texte de la calculatrice. penser a lancer la calculatrice avant d'executer le bout de code.

Et, si l'objet que tu cherche est dans une "Frame", le parent n'est plus la fenetre mais cette Frame. il faudra donc r‚cuperer le handle de cette Frame avant de pourvoir récuper ensuite ton objet.

bon courage ;)
Olivier.
0
SR2 Messages postés 46 Date d'inscription samedi 17 juillet 2004 Statut Membre Dernière intervention 25 juillet 2006 1
1 mars 2005 à 22:15
salut
j'ai essayer ton code il fonctionne sur une autre appli autre que la calculatrice mais j'aurais voulu savoir comment il fallait faire pour récupérer par exemple la deuxième, troisième textbox etc...
merci
0
Rejoignez-nous