[Delphi] Récupérer les infos affichées par une autre appli

Récupérer les infos affichées par une autre appli [Delphi] - Delphi/Pascal - Programmation

Marsh Posté le 15-07-2004 à 18:17:29    

Je me demandais : est'il possible de récupérer les infos affichées par une autre appli ?
 
Le problème de la reconnaissance des chiffres n'est pas un vrai souci, la police utilisée étant classique et de taille fixe ( donc bon, 10 bitmaps à comparer et basta ).  
 
Mon problème est de savoir si il est possible de récupérer en delphi l'intérieur d'une fenetre d'une autre appli, si possible quand celle-ci est minimisée dans le tray ...
 
Par exemple récupérer le contenu de la fenêtre dans un gros bitmap que je peux ensuite décortiquer :)
 
Merci d'avance pour vos précieux conseils, j'ai pas trouvé grand yauq' sur google :/


Message édité par Tetedeiench le 15-07-2004 à 18:27:44
Reply

Marsh Posté le 15-07-2004 à 18:17:29   

Reply

Marsh Posté le 15-07-2004 à 18:31:14    

Oui il est tout à fais possible ;)
 
Mais je ne suis pas doué pour ca ;)
 
regarde ce source :
 

Code :
  1. program Project1;
  2. uses
  3.   Windows,
  4.   shellapi,
  5.   messages;
  6. {$R *.RES}
  7. var
  8. TimeCount            : integer;
  9. TetrisMainHandle     : integer;
  10. ClientSettingshandle : integer;
  11. IPserveurHandle      : integer;
  12. ConnectBOutonHandle  : Integer;      //Differentes Handles Recherchées
  13. DialogBoutonHandle   : Integer;
  14. Serveur          :  string;
  15. TetrisDir        :  string;
  16. TetrisWIndowText :  string;
  17. const
  18. TimeOUT            : Integer= 100                      ;
  19. ClientSettingsText       : string = 'Client Settings '        ;
  20. IPserveurClass           : string = 'TEdit'                   ;
  21. ConnectBOutonTExt        : string = 'Connect'                 ;
  22. DialogBoutonText         : string = 'Partyline '              ;
  23. Erreur_Title             : string = 'TetrisNet introuvable ou deja ouvert => fermeture de fast tetris.'   ;
  24. erreur_Text              : string = 'Erreur'                  ;
  25. DefaultServeur           : string = 'tetrinet-progfou.no-ip.org';
  26. DefaultTetrisApp         : string = 'C:\Program Files\Divers\TetriNET\TETRINET.EXE';
  27. DefaultTetrisWIndowText  : string = 'TetriNET v1.13'          ;
  28. BaliseVersion      : string = 'Version='                ;
  29. BaliseServeur      : string = 'Serveur='                ;
  30. BaliseTetris       : string = 'AppDir='                 ;
  31. //Ces constantes correspondent a un programme particulié
  32. {$I-}
  33. Function TestTetrisApp : integer;
  34. var
  35. F :file;
  36. Begin
  37.    assignfile(F,TetrisDir);
  38.    reset(F);
  39.    result :=  filesize(F) ;
  40.    closefile(f);
  41. end;
  42. {Func TestTetrisApp}
  43. Procedure LoadParams;
  44. var
  45. I : integer;
  46. ligne : string;
  47. Begin
  48.    Serveur              := DefaultServeur  ;
  49.    TetrisDir            := DefaultTetrisApp;
  50.    TetrisWIndowText     := DefaultTetrisWIndowText;
  51. for I := 0 to paramcount do
  52.         Begin
  53.   ligne := paramstr(I) ;
  54.      if copy(Ligne,1,length(BaliseServeur)) = BaliseServeur then
  55.      Begin
  56.      if pos('"',ligne) <> 0 then  begin
  57.                         ligne := copy(ligne,pos('"',ligne),length(ligne));
  58.                         if pos('"',ligne) <> 0 then ligne := copy(ligne,pos('"',ligne),length(ligne));
  59.                                   end else ligne := copy(ligne,Length(baliseserveur)+1,length(ligne));
  60.      Serveur := ligne ;
  61.      end;
  62.         if copy(Ligne,1,length(BaliseTetris)) = BaliseTetris then
  63.      Begin
  64.      if pos('"',ligne) <> 0 then  begin
  65.                         ligne := copy(ligne,pos('"',ligne),length(ligne));
  66.                         if pos('"',ligne) <> 0 then ligne := copy(ligne,pos('"',ligne),length(ligne));
  67.                                   end else ligne := copy(ligne,Length(BaliseTetris)+1,length(ligne));
  68.      TetrisDir := ligne ;
  69.      end;
  70.           if copy(Ligne,1,length(BaliseVersion)) = BaliseVersion then
  71.      Begin
  72.      if pos('"',ligne) <> 0 then  begin
  73.                         ligne := copy(ligne,pos('"',ligne),length(ligne));
  74.                         if pos('"',ligne) <> 0 then ligne := copy(ligne,pos('"',ligne),length(ligne));
  75.                                   end else ligne := copy(ligne,Length(BaliseVersion)+1,length(ligne));
  76.      TetrisWIndowText := ligne ;
  77.      end;
  78.         end;
  79. end;
  80. {Proc LoadParams}
  81. function Test_Edit(hWnd: integer; lParam: integer): boolean;  stdcall;
  82. var
  83.    Classe : array[0..250] of Char;
  84. begin
  85.   result := true;
  86.   GetClassName(hWnd,Classe,SizeOf(Classe));
  87.   if Classe = IPserveurClass then begin
  88.   IPserveurHandle := hWnd;
  89.   result := not IsWindowVisible(hWnd);
  90.                                    end;            //Cette Function Callback n'identifiera
  91.                                                    //Que le composant Tedit de l'adresse du serveur.
  92. end;
  93. {Func CallBack Test_Edit}
  94. function Test_Btn(hWnd: integer; lParam: integer): boolean;  stdcall;
  95. var
  96.    Text : array[0..250] of Char;
  97. begin
  98.   result := true;
  99.   GetWindowText(hWnd,text,SizeOf(text));
  100.   if Text = ConnectBOutonTExt then begin
  101.   ConnectBOutonHandle := hWnd;
  102.   result := not IsWindowVisible(hWnd);
  103.                                    end;            //Cette Function Callback n'identifiera
  104.                                                    //Que le composant Tbouton de l'adresse du serveur.
  105. end;
  106. {Func CallBack Test_Btn}
  107. Procedure EnvoyerText(Handle : integer;Text : string);
  108. begin
  109. SendMessage(Handle,WM_SetText,0, integer(Pchar(text)));   //Cette procedure Ajoute un text particulier
  110. end;                                                      //a un compo donné.
  111. {Proc EnvoyerText}
  112. Procedure Cliquer(Handle : integer);
  113. begin
  114. SendMessage(Handle,WM_LbuttonDown, MK_LBUTTON, 0);       //cette serie de message assure un clique
  115. SendMessage(Handle,WM_LbuttonUp, MK_LBUTTON , 0);
  116. end;
  117. {Proc Cliquer}
  118. {((((((((((((((((((((((((((((Demarrage Du PROGRAMME))))))))))))))))))))))))) }
  119.                                      begin
  120. {((((((((((((((((((((((((((((Demarrage Du PROGRAMME))))))))))))))))))))))))) }
  121.                               {Codes du programme}
  122. loadParams;
  123. if TestTetrisApp = -1 then begin
  124. MessageBox(0,Pchar(erreur_title),Pchar(erreur_text),0);
  125. exit;
  126.                            end;
  127. Shellexecute(0,'Open',Pchar(TetrisDir),'','',0);      //Lancement de Tetris
  128. TimeCount := 0;
  129. While (findwindow(nil,Pchar(TetrisWIndowText)) = 0) do  //attente de chargement de tetris
  130.         Begin sleep(500);inc(TimeCount);if (TimeCount = Timeout) then  exit; end;
  131. TetrisMainHandle := findwindow(nil,Pchar(TetrisWIndowText));  //fenetre principale
  132. While (findwindowEx(TetrisMainHandle,0,nil,Pchar(ClientSettingsText)) = 0) do  //attente de chargement de tetris
  133.         Begin sleep(500);inc(TimeCount);if (TimeCount = Timeout) then  exit; end;
  134. ClientSettingshandle := findwindowEx(TetrisMainHandle,0,nil,Pchar(ClientSettingsText)); //volet connection
  135. DialogBoutonhandle := findwindowEx(TetrisMainHandle,0,nil,Pchar(DialogBoutonText)); //volet connection
  136. cliquer(ClientSettingshandle); //active le volet de connection
  137. sleep(200);
  138. EnumchildWindows(ZeldaMainHandle,@Test_Edit,0);  //va reperer le Tedit a l'aide d'un enum
  139. if IPserveurHandle <> 0 then
  140.         EnvoyerText(IPserveurHandle,Serveur)       //ajoute le text au Tedit
  141.                         Else Exit;
  142. EnumchildWindows(TetrisMainHandle,@Test_Btn,0);  //va reperer le Bouton a l'aide d'un enum
  143. if ConnectBOutonHandle <> 0 then
  144.         cliquer(ConnectBOutonHandle)     //clique sur le bouton Connect
  145.                         Else Exit;
  146. cliquer(DialogBoutonhandle);
  147. SetWindowText(TetrisMainHandle,Pchar(TetrisWIndowText+' Launch By Bodman'));
  148. end.


 
 
Tu peus le modifier à volonté ;)


---------------
En theorie la pratique est égale a la théorie, en pratique ce n'est pas le cas.
Reply

Marsh Posté le 15-07-2004 à 18:44:04    

Merci :jap:  
 
Le prends pas mal cependant, va me falloir un peu de temps pour capter ce que ton programme fait ;)

Reply

Marsh Posté le 15-07-2004 à 18:46:50    

Ben c'est pour controler Tétrinet ;)
 
Mais bon tu peus testé avec notepad ou je ne sais quoi d'autre


---------------
En theorie la pratique est égale a la théorie, en pratique ce n'est pas le cas.
Reply

Marsh Posté le 15-07-2004 à 18:48:50    

Amokers a écrit :

Ben c'est pour controler Tétrinet ;)
 
Mais bon tu peus testé avec notepad ou je ne sais quoi d'autre


 
Yep, mais si tu veux c'est pas "naturel" ( non pas que ce soit mal codé hein ).
 
Enfin merci énormément :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed