Jai besoin daide!!!

PatSW Messages postés 24 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 1 février 2005 - 17 févr. 2003 à 00:24
PatSW Messages postés 24 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 1 février 2005 - 17 févr. 2003 à 01:18
J'aimerais savoir comment lire et écrire d'une application a une autre.

Ex: Dans Project1.exe, un Memo contien le texte "Allo";
je veux pouvoir lir ce texte a partir de Project2.exe

Merci de votre aide!

5 réponses

cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
17 févr. 2003 à 00:45
Evitez les titres comme "a l'aide" "Un problème" " Au secours".... Ce n'est pas parlant et bloque le système de recherche dans le forum.

Pour dialoguer entre deux applications, il y a plusieurs méthodes :
- Echange direct DDE
- Echange avec TCP/IP
- Echange par mapping mémoire.

Si tu programme les deux applications, le mieux est de réaliser un échange par TCP/IP, car il fonctionne aussi sur un réseau local ou Internet.

Par contre si tu ne réalises pas une des deux applications, c'est plus compliquer. Il faut récupérer le Handle de l'application, enumérer les fenêtre qu'elle contient afin de trouver le Handle du Memo. Et enfin jouer avec les messages Windows pour lire et écrire le texte du mémo.

--- :sleepy) Nono40@fr.st :sleepy) ---
Nouveau ---> Nono40.fr.st
0
PatSW Messages postés 24 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 1 février 2005
17 févr. 2003 à 00:47
Heu, pourrais tu mexpliquer comment fonctionne les "message windows" ??? (car une des application nest pas de moi)
0
cs_Nono40 Messages postés 962 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 12 septembre 2006 2
17 févr. 2003 à 00:58
Que veux-tu savoir exactement ?

Si tu ne connais rien sur les messages Windows, regarde dans la section cours de Developpez.com.

Ensuite voici un exemple de lecture/écriture de données dans une autre application :( en l'occurence il s'ahit ici de IE )

procedure ShowStatusExample;
const
cBuf = 1024;
var
s: String;
hMain: HWND;
hStatus: HWND;
idProcess: DWORD;
hProcess: THandle;
pBuf: Pointer;
n: cardinal;
i: integer;
cParts: integer;
begin
// Get main window handle
hMain := FindWindowEx(0, 0, 'IEFrame', nil);
if hMain = 0 then RaiseLastWin32Error;

// Get process handle
GetWindowThreadProcessID(hMain, @idProcess);
hProcess := OpenProcess(PROCESS_ALL_ACCESS, False, idProcess);
if hProcess = 0 then RaiseLastWin32Error;

// Allocate buffer in process
pBuf := VirtualAllocEx(hProcess, nil, cBuf, MEM_COMMIT, PAGE_READWRITE);
if pBuf = nil then RaiseLastWin32Error;

try
 // Show main window's text
 n := GetWindowTextLength(hMain);
 SetLength(s, n);
 GetWindowText(hMain, PChar(s), n);
 ShowMessage(s);

 // Get status bar handle
 hStatus := FindWindowEx(hMain, 0, 'msctls_statusbar32', nil);
 if hStatus = 0 then RaiseLastWin32Error;

 // Get number of parts in status bar
 cParts := SendMessage(hStatus, SB_GETPARTS, 0, 0);

 for i := 0 to cParts - 1 do
 begin

   // Get status bar text into buffer
   n := LoWord(SendMessage(hStatus, SB_GETTEXT, i, Integer(pBuf)));
   SetLength(s, n);

   // Read buffer
   if not ReadProcessMemory(hProcess, pBuf, PChar(s), n, n) then
     RaiseLastWin32Error;

   if s <> '' then
     ShowMessage(IntToStr(i) + ': ' + s);
 end;

finally
 VirtualFreeEx(hProcess, pBuf, cBuf, MEM_RELEASE);
end;

end;


--- :sleepy) Nono40@fr.st :sleepy) ---
Nouveau ---> Nono40.fr.st
0
PatSW Messages postés 24 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 1 février 2005
17 févr. 2003 à 01:09
Merci Nono40!
C'est bien mais un peux compliquer...

Quelqu'un si il y aurais une facon simple de détecter le handle de l'objet où le curseaur est?

Exemple: Mon curseau est dans IEFrame ou CabinetWClass dans la barre d'adresse et la je récupere le texte de la barre d'adresse... je ne veux pas selement pour un objet; si le curseur est dans ce TextArea, je veux récuperer le texte du TextArea.

Sinon, je men tiendrai a ce code...

Merci a tous
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PatSW Messages postés 24 Date d'inscription samedi 28 décembre 2002 Statut Membre Dernière intervention 1 février 2005
17 févr. 2003 à 01:18
J'ai un moyen pour faire exactement ce que je veux mais pas de la bonne facon;

De cette facon, jobtien le texte se trouvant sour la sourais... je veux le texte ou se trouve le curseur.

Voici le source:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;

type
TForm1 = class(TForm)
Timer1: TTimer;
Edit1: TEdit;
function GetCaptionAtPoint(CrPos: TPoint): string;
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.GetCaptionAtPoint(CrPos: TPoint): string;
var
textlength: Integer;
Text: PChar;
Handle: HWND;
begin
Result := 'Empty';
Handle := WindowFromPoint(CrPos);
if Handle = 0 then Exit;
textlength := SendMessage(Handle, WM_GETTEXTLENGTH, 0, 0);
if textlength <> 0 then
begin
getmem(Text, textlength + 1);
SendMessage(Handle, WM_GETTEXT, textlength + 1, Integer(Text));
Result := Text;
freemem(Text);
end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
var SourisPos: TPoint;
begin
GetCursorPos(SourisPos);
Edit1.Text:=GetCaptionAtPoint(SourisPos);
end;

end.

Merci...
0
Rejoignez-nous