Newsgroup: it.comp.lang.delphi
Titolo: Aiuto per programma delphi

Ciao, volevo sapere se č possibile, con il delphi, accedere alle finestre di
altre applicazioni (come puo' essere internet explorer, word, ecc),
individuarne i componenti (tipo i pulsanti o gli edit box) e poterci
scrivere oppure simulare la pressione di un pulsante.
Sareste cosě gentili da darmi una mano, perchč non so proprio da dove
cominciare.
Grazie
Nella

Benvenuta.
Riguardo M$Office, sopratutto Word ed Excel, esistono una marea di vecchi
post che trattano il loro utilizzo da delphi via OLE Automation.
Se cerchi sui gruppi tramite google puoi trovare un sacco di informazioni e
suggerimenti interessanti.
Bye
A.


Per quanto riguarda i programmi M$, ti ha già risposto Alberto. Se vuoi
accedere ai componenti di altre applicazioni devi usare (come suggerito in
un post di qualche giorno fa) enumwindow ed enumchildwindow per ottenere,
rispettivamente l'handle delle applicazioni e dei componenti. Poi usi
SendMessage per inviare il tuo messaggio (che può essere la pressione di un
tasto, la scrittura di una stringa in un campo edit, etc.).
Ciao ciao

Vi ringrazio per le vostre risposte, ma a me manca proprio la base, ossia,
come faccio a intercettare un'altra applicazione tramite delphi...
Non so se mi sono spiegata... sul post di qualche giorno fa ho letto che si
parlava di handle, ma come faccio a recuperare gli handle delle altre
applicazioni?
grazie
Nella


Premesso che non ho molto tempo a disposizione, vediamo cosa possiamo fare.
Prima di tutto direi di fare un passo alla volta: ottenere prima gli handle
delle finestre (in seguito anche quelli dei componenti che ci sono in queste
finestre).
Devi usare, la EnumWindows:
EnumWindows(@MiaProcWindows, 0);
EnumWindows passa a MiaProc l'handle di ogni finestra.
Quindi:
  TFinestra = record
                Handle: HWND;
                Testo: string;
                Classe: string;
             end;
Var
    FinCurr: TFinestra;
function MiaProcWindows (Wnd: HWnd): Bool;  export; stdcall;
var
  vTestoFinestra, vClasseFinestra: array[0..99] of Char;
begin
  GetClassName (Wnd, vClasseFinestra, 100); // Ottieni la Classe (Es.:
Shell_TrayWnd)
  GetWindowText(Wnd, vTestoFinestra, 100); // Ottieni l'Handle (Finalmente!)
  FinCurr.Handle:= Wnd;
  FinCurr.Testo:= StrPas(vTestoFinestra);
  FinCurr.Classe:= StrPas (vClasseFinestra);
 ListBox1.Items.Add ('CLASSE: [' + FinCurr.Classe + '] ' +
                                  'HANDLE: [' + IntToHex(FinCurr.Handle, 8)
+ '] ' +
                                  'TEXT: [' + FinCurr.Testo + ']');
  Result := True
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
  EnumWindows(@MiaProcWindows, 0);
end;
Fai il debug del codice, così vedi come funziona.
Ciao ciao

Ciao, ti ringrazio tantissimo per le tue spiegazioni.
Posso chiederti ancora un aiuto? :)
Ho provato a fare il programmino che mi hai scritto, pero' nel momento in
cui devo richiamare la EnumWindow mi da' errore...
Come posso fare?
Grazie
Nella


 Come posso fare?
per iniziare, sarebbe molto utile sapere QUALE ERRORE, non trovi?
Bye
A.


Direi che sono d'accordo :)

Io la richiamo cosě come mi hai detto tu:
EnumWindows(@MiaProcWindows, 0);
e l'errore č: Variable required


Prova a postare tutto il codice (se non č infinito :) ).
Poi, l'errore lo da sulla chiamata ad EnumWindows(@MiaProcWindows, 0) ?
Ciao ciao

 Prova a postare tutto il codice (se non è infinito :) ).


Ho riprovato il codice che ti ho postato e funziona.
Ti dà solo quello come errore?
Saluti