Récupérer le texte d'un Edit avec l'handle.. [Résolu]

shell13010 73 Messages postés mardi 3 avril 2007Date d'inscription 12 mai 2013 Dernière intervention - 20 févr. 2010 à 15:59 - Dernière réponse : delphinovice 6 Messages postés samedi 12 avril 2008Date d'inscription 15 mars 2010 Dernière intervention
- 15 mars 2010 à 18:09
Bonjour a tous,

J'aimerais savoir comment récupérer le texte d'un Edit d'une autre application?

donc j'ai une fonction que j'ai modifier mais je pense qu'il est pas bon donc si vous pourriez donner votre avis sur la fonction sa serais bien ..

function GetEditText(const AppClass, EditClass: string; EditIndex: Integer; out Text: string): Boolean;
var hWndApp, hEdit: HWND;
buffer: array[0..4095] of char;
const BUF_SIZE = 4096;
begin
result := False;
hWndApp:= FindWindow(PChar('APP1'), nil); //ici l'Handle de l'application externe si je me trompe pas?
if (hWndApp<> 0) then
begin
hEdit := FoundChild(hWndWord, PChar('Edit'), nil, EditIndex); //ici je suppose que c'est l'Edit?
if (hEdit <> 0) then //ici teste si bon envoie...
begin
Sendmessage(hEdit,WM_GETTEXT, BUF_SIZE , Cardinal(@buffer));
result := True;
Text := buffer;
end;
end;
end;

Mais par contre j'ai 2 erreur que je n'arrive a déclarer les voici:

[Erreur] Unit2.pas(40): E2003 Identificateur non déclaré : 'FoundChild'
[Erreur] Unit2.pas(40): E2003 Identificateur non déclaré : 'hWndWord'
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention - 20 févr. 2010 à 20:49
3
Merci
Salut,

Effectivement, il y a des soucis dans ta fonction. Il te manque la fonction FoundChild et la déclaration de hWndWord... Mais je pense que c'est plutôt hWndApp qui devrait être là.

Il faut que tu code FoundChild, avec du EnumChildWindows par exemple.

Merci cs_rt15 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 75 internautes ce mois-ci

Commenter la réponse de cs_rt15
shell13010 73 Messages postés mardi 3 avril 2007Date d'inscription 12 mai 2013 Dernière intervention - 20 févr. 2010 à 16:01
0
Merci
Mince désoler j'avais pas fini :(

Donc Merci d'avance pour se qui pourront m'aiguiller ;)

Bonne journée.
Commenter la réponse de shell13010
shell13010 73 Messages postés mardi 3 avril 2007Date d'inscription 12 mai 2013 Dernière intervention - 22 févr. 2010 à 20:12
0
Merci
Salut et merci pour ta reponse mais je n'arrive toujours pas a récupérer le contenu de l'Edit1 et enfin le recuperer dans l'APP :(

function FoundChild(Parent: THandle; const ClassName, WindowName: string; ChildIndex: Integer = 0): THandle;
var
   HandleFound: THandle;
   lpRes : array[0..256] of Char;
   StrClass: string;
   StrCaption: string;
   iChild: Integer;
begin
   Result := 0;
   iChild := -1;

   HandleFound := GetWindow(Parent, GW_CHILD);
   while HandleFound > 0 do
   begin
      GetClassName(HandleFound, lpRes, SizeOf(lpRes));
      StrClass := lpRes;
      GetWindowText(HandleFound, lpRes, SizeOf(lpRes));
      StrCaption := lpRes;

      if ((ClassName 'Edit1') or SameText(ClassName, StrClass)) and ((WindowName 'APP') or SameText(WindowName, StrCaption)) then
      begin
         Inc(iChild);
         if iChild >= ChildIndex then begin
            Result := HandleFound;
            Exit;
         end;
      end else
      begin
         Result := FoundChild(HandleFound, ClassName, WindowName, ChildIndex);
         if Result > 0 then Exit;

      end;

      HandleFound := GetWindow(HandleFound, GW_HWNDNEXT);
   end;
end;



Le probleme c'est que je n'arrive pas a utiliser cette fonction car pour moi elle et assez compliquer donc si une personne pourrez me dire le probleme je lui en serais reconnaissant surtout que je voudrais juste le recuperer dans mon Memo :(

Merci d'avance pour votre aide.

Cordialement.
Commenter la réponse de shell13010
cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention - 23 févr. 2010 à 09:15
0
Merci
Le problème, c'est que le code dépend pas mal de l'arborescence de fenêtre de l'application dans laquelle tu veux récupérer un handle sur l'edit...

Il faut commencer par l'analyser avec un outil genre spy++ ou celui .

Une fois que tu connais tous les détails sur l'edit et ses fenêtre parentes, en partant de la fenêtre principale et en utilisant GetWindow comme dans la fonction précédente, tu devrais parvenir à récupérer un handle sur ton edit.
Commenter la réponse de cs_rt15
Utilisateur anonyme - 24 févr. 2010 à 14:01
0
Merci
Salut

Et si tu lisais l'aide liée à ton Delphi (Touche F1 ) plutot que de faire de simples copier/coller ? Ca te permettrait de comprendre.

Extrait de l'aide :

TObject.ClassName Renvoie une chaîne indiquant le nom du type de l'instance d'objet (par opposition au type de la variable transmise comme argument).

class function ClassName: ShortString;

Description

Utilisez la méthode ClassName pour connaître le nom (tel que 'TButton') d'un type d'un objet. Cela permet de différencier les instances d'objet affectées à une variable qui possède le type d'une classe ancêtre. ClassName renvoie une chaîne indiquant le type réel de l'objet et non le type déclaré de la variable.

Quand les erreurs de gestion des exceptions sont indiquées pour un objet particulier, l'instruction on utilise ClassName pour faire une comparaison de chaînes de classes.


Ainsi ClassName='Edit1' alors que ClassName='TEdit'

On le redira jamais assez : Apprendre les bases, lire des tutos, lire des bouquins avant toutes choses
Commenter la réponse de Utilisateur anonyme
delphinovice 6 Messages postés samedi 12 avril 2008Date d'inscription 15 mars 2010 Dernière intervention - 15 mars 2010 à 18:09
0
Merci
Ainsi ClassName='Edit1' alors que ClassName='TEdit'
API windows
Commenter la réponse de delphinovice

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.