Newsgroup: it.comp.lang.delphi
Titolo: Leggere i dati da un'applicazione esterna?

 Sapete dirmi se e' vero ed eventualmente come si fa?
Ciao,
            da un'occhiata al messaggio WM_GETTEXT (non usare la
GetWindowText).
Una volta ottenuto l'handle della finestra che ti interessa tramite le varie
FindWindow, FindWindowEx, EnumWindowsEx ecc ecc ti basta spedire quel
messaggio e specificare in uno dei parametri il puntatore ad un array di
caratteri per ottenere il testo della finestra.
Dai anche un'occhiata al WM_GETTEXTLENGTH per poter allocare correttamente
la memoria necessaria.
Adesso che ci guardo, ho già una procedurina pronta:
Function OttieniTesto(h:hwnd):string;
var Testo:string;
      NumCar:integer;
begin
 NumCar:=SendMessage(h,WM_GetTextLength,0,0);
 setlength(testo,NumCar);
 SendMessage(h,WM_GetText,NumCar+1,Integer(testo));
 result:=testo;
end;
Ps: questa la puoi utilizzare con praticamente tutte le finestre che abbiano
un handle (pulsanti, finestre [form], edit, combobox....) sappi anche che si
possono modificare gli Edit in modo che non rispondano al messaggio
WM_GetText (per motivi di sicurezza, per esempio per le passwords...)
Pps: giusto per completezza, sappi che esistono tecniche (+ o - avanzate)
per "fregare" anche le Edit modificate...
Ppps: spero che tu non stia cercando di leggere una password... ;-)
Ciao :-)
--
(¯`·.¸¸.·´¯`·.¸¸.-> Andrea <-.¸¸.·´¯`·.¸¸.·´¯)
AntiSpam: rimuovere il trattino basso dall'indirizzo per rispondere
AntiSpam: remove the underscore from the e-mail address to reply

Salve di nuovo, ho un altro problema (un po' strano).
Mi pare di aver letto una volta che era possibile, tramite le API, leggere
il contenuto degli EditBox contenuti in una finestra di un'altra
applicazione (per esempio leggere il numero contenuto nella calcolatrice di
Windows).
Sapete dirmi se e' vero ed eventualmente come si fa?
Grazie
Daigo
--
And the beast shall come forth surrounded by a roiling
cloud of vengeance. The house of the unbelievers shall
be razed and they shall be scorched to the earth. Their
tags shall blink until the end of days.
From The Book of Mozilla, 12:10

Sapete dirmi se e' vero ed eventualmente come si fa?
si, si può fare a patto che la casella di testo o quello che sia abbia un
handle o qualcosa con cui la puoi identificare.
In pratica una EditBox avrà una classe.
A run-time avrò un handle (dinamico) che puoi ricercare partendo dalla
classe.
Però ti conviene ricercare prima la finestra che contiene la EditBox, poi
ricercare la EditBox all' interno di questa finestra. Anche la finestra avrà
la sua classe e handle.
Ora un sistema semplice è l' utilizzo dell' API "FindWindow"  che richiede
due parametri dove uno può essere anche nil. Il primo parametro è la classe
della finestra, il secondo il titolo.
Conviene basarci sulla classe in quanto il titolo può cambiare....non si sa
mai !!!
Trovato l' handle della finestra non ti rimane che conoscere l' handle del
componente EditBox tramite la "FindWindowEx".
Ora che sai l' handle, puoi provare ad inviargli un messaggio come
WM_GETTEXT e farti restituire il testo oppure prova con "GetWindowText".
Sono tutte API semplici da utilizzare.
Per conoscere le classi di finestre e componenti visuali, puoi utilizzare
Winsight fornito con Delphi.
Ti saluto.
Per i dettagli scrivi nuovamente !!!
Ciaoooo !!!!
Antonio Tarolla
BSSoftware Tips Mailing - List Support

Ppps: spero che tu non stia cercando di leggere una password... ;-)
Non sta cercando di leggerne una!!! :-)
Ciao!!
--
- Carlo -
BSSoftware Tips Mailing-List Support

 (spero di non dimenticare nessun Msg) tu non hai modo di leggere quei
dati!!
Beh, a parte ricorrere al classico hook di tastiera, si potrebbe subclassare
il controllo Edit e ridefinire tutta la WndProc (nel senso che si tornerebbe
ad avere un controllo "pulito" e poi si potrebbero riscrivere i gestori per
i msg direttamente facendo uno switching sulla coda dei messaggi...)
Ovvio però che per fare una manovra del genere bisogna iniettare il proprio
codice (la nuova WndProc) nello spazio di indirizzamento del processo
proprietario della Edit... (Una tecnica per fare questa è quella della DLL
Hook "fasulla" che mi pare di averti già accennato in passato...)
