Newsgroup: it.comp.lang.delphi
Titolo: Impedire la chiusura di un'applicazione esterna

Salve a tutti, ho bisogno di una suggestion tecnica. Ho realizzato un
programmino che deve integrarne uno gia' esistente (non dispongo dei
sorgenti di quest'ultimo). In pratica, quando nel programma host succedono
determinate cose, viene aperta una determinata maschera del mio programma.
Il mio problema nasce dal fatto che dovrei fare in modo che il programma
host non possa essere chiuso (o almeno chieda conferma) se qualche finestra
della mia applicazione e' aperta.
Il mio quesito e': come faccio a sapere quando qualcuno sta cercando di
chiudere l'host ed eventualmente impedire l'operazione? In pratica dovrei
gestire la chiusura con un handler analogo a "OnCloseQuery" su un programma
esistente, ma non ho trovato un sistema accettabile... (premetto che gli
hook sono stati bocciati a priori, soprattutto se residenti all'interno di
DLL. A questo punto penso non ci sia soluzione, ma ci ho provato lo stesso).
Ringrazio in anticipo per i suggerimenti. =)
Ciao
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

non so se ho capito bene, ma forse potresti riavviare il programma ogni
volta che viene spento...

 DLL. A questo punto penso non ci sia soluzione, ma ci ho provato lo
stesso).
Dovresti specificare in che sistema sei (NT/2000, 98, 95...)...
Cmq direi che l'utilizzo di un hook sarebbe ideale. Perchè bocci a priori?
paura di un impatto sulle prestazioni/stabilità?
Tieni presente che, se proprio non vuoi tenere attivo un hook per fare ciò
che devi fare, potresti fare così:
sfrutti l'installazione di un hook per poter attaccare un thread "parassita"
al processo host.
A questo punto subclassi la finestra che ti interessa et voilat : hai fatto.
Puoi rimuovere l'hook subito dopo aver subclassato la finestra _ma_ devi
evitare che la DLL venga scaricata da quel thread: puoi usare un ciclo di
messaggi (PeekMessage, TranslateMessage, DispatchMessage...) nel thread
stesso.
Avrei un paio di ideuzze molto azzardate su come risolvere il tutto
dall'esterno (niente hooks) ma sono idee molto molto azzardate ;-)
Ciao :-)
--
(¯`·.¸¸.·´¯`·.¸¸.-> Andrea <-.¸¸.·´¯`·.¸¸.·´¯)
AntiSpam: rimuovere il trattino basso dall'indirizzo per rispondere
AntiSpam: remove the underscore from the e-mail address to reply


No, perche' quando il programma host viene chiuso si deve chiudere anche il
mio.
Grazie comunque
Daigo


Anche io sto facendo dei tentativi un po' strani, appena ho qualcosa di
concreto magari posto la mia soluzione.
Ciao
Daigo

 se ci sono finestre di (A) aperte, (B) non possa essere chiuso.
Sei a cavallo: se B carica C e tu puoi modificare C non ti resta che
effettuare il subclassing da C (che viene caricata nello stesso spazio di
indirizzamento di B), puoi farlo intercettando Reason=DLL_PROCESS_ATTACH
nella DLLProc...



Il problema l'ho gia' risolto, ma tu cosa intendi per subclassing? Penso di
non aver capito...
Daigo
--
------------------------------------------------------------
E-Mail:    
dai...@usa.net
 
dragons...@yahoo.com
 
da...@telemail.it
ICQ: 2031448
------------------------------------------------------------

 non aver capito...
Subclassing = sostituire la WindowProc (procedura che gestisce la coda dei
messaggi di una finestra)  di una finestra...
In generale si fa con la Set/GetWindowLong, se si usa la VCL tutti i
TWinControl hanno un puntatore a WndProc e basta assegnare quello...
Si chiama "sub"classing perchè data una finestra ne modifichi il
funzionamento (solo di quella finestra). Il SuperClassing si effettua a
monte e ha influenza su _tutte_ le istanze di quella finestra.
