Newsgroup: it.comp.lang.delphi
Titolo: Chiudere correttamente Internet Explorer

Salve a tutti
    ho un problema alquanto curioso; devo costruire un applicazione , per un
Internet Café, che ad un determinato tempo chiuda tutti gli Internet
Explorer attivi. Grazie alla funzione EnumWindows e ad un opportuno filtro
riesco ad ottenere tutti gli handle delle finestre di IE, Il problema è che
non riesco a chiudere correttamente l'applicativo:
    - se invio il messaggio WM_CLOSE o WM_QUIT O WM_ENDSESSION, questi
vengono puntualmente ignorati.
    - se invio il messaggio WM_DESTROY la finestra va in crash bloccandosi,
ma non si chiude.
    Qualcuno sa come chiudere correttamente questa benedetta applicazione?
    Saluti!
______________________________________
Gian Luca Dalla Torre
E - Mail: 
gianluca....@casteo.net
______________________________________

Ciao Gian Luca,
è un po' che non ci si sente eh....
Forse quanto sto per dirti non è il massimo come soluzione,
ma sembra funzionare....ecco qua
Var
shellhandle:Integer;
implementation
{$R *.DFM}
shellHandle:=FindWindow('ProgMan',nil);
PostMessage(shellHandle,WM_QUIT, 0,0);
ShellExecute(0, 'open', 'Explorer', nil, nil, SW_SHOWNORMAL);
Ti saluto e fatti sentire!!!
Ciao
--
- Carlo -
BSSoftware Tips Mailing-List Support

     Qualcuno sa come chiudere correttamente questa benedetta applicazione?
Mi sono imbattuto anch'io in questo problema: l'unico modo con cui ho
risolto è quello di chiudere brutalmente il processo con
TerminateProcess(hIE);
CloseHandle(hIE); // questa è importante per liberare handle (e risorse)...
Tra l'altro penso che anche tu, come me, a questo punto troverai + comodo
usare le ToolHelp per avere una lista dei processi attivi (e non la
EnumWindows per avere una lista delle finestre presenti nel sistema)...
Cmq se non vuoi usare ToolHelp/PSApi [se sei sotto NT] puoi usare la
GetWindowThreadProcessID che ti ritorna il process ID del processo a cui
appartiene la finestra di cui passi l'handle...
Se ben ricordo però IE4 (all'epoca io mi ritrovai a smadonnare su quello) ha
la stessa classe delle finestre della shell [e questo significava stare
attenti a terminare iexplore.exe e non explorer.exe ...], non so IE5...
La simpatia di M$ non ha limiti... ;-)
--
(¯`·.¸¸.·´¯`·.¸¸.-> Andrea <-.¸¸.·´¯`·.¸¸.·´¯)
Ps: adesso che ci penso, se IE esporta interfacce COM forse lo puoi
terminare da lì...
AntiSpam: rimuovere il trattino basso dall'indirizzo per rispondere
AntiSpam: remove the underscore from the e-mail address to reply

    Qualcuno sa come chiudere correttamente questa benedetta applicazione?
la classe di Internet Explorer 4.0 è 'IEFrame' quindi con un semplice
FindWindow e un successivo PostMessage (WM_CLOSE) la metti a KO.
Almeno a me va subito a KO.
Controlla che l' handle della FindWindow (come ti ho suggerito) corrisponde
a quello enumerato dalla EnumWindows (tanto per stare tranquilli).
Poi vedi se con il mio sistema si chiude e se così fosse cerca di capire
cosa accade con la EnumWindows !!
In alternativa credo che potresti terminare il processo di Internet Explorer
!!
Ti saluto.....ciao !!
Antonio Tarolla
BSSoftware Tips Mailing - List Support


Hai provato con il WM_SYSCOMMAND e parametro SC_CLOSE?
Dovrebbe essere lo stesso messaggio che manda il bottoncino X di chiusura
Ciao,
Stefano

 Hai provato con il WM_SYSCOMMAND e parametro SC_CLOSE?
Come al solito sei un grande!
Funziona perfettamente (ed è anche logico effettivamente...), ci ho provato
solo oggi perchè la scuola mi tartassa... (non è vero, sono a casa in
vacanza e sono sempre fuori ma devo mantenere la scusa ufficiale per cause
di forza maggiore!) :-))
E io che mi ero messo a massacrare di botte il processo per farlo terminare
;-)
Ciao :-)
--
(¯`·.¸¸.·´¯`·.¸¸.-> Andrea <-.¸¸.·´¯`·.¸¸.·´¯)
AntiSpam: rimuovere il trattino basso dall'indirizzo per rispondere
