Newsgroup: it.comp.lang.visual-basic
Titolo: [H] Domandina semplice semplice ...

Salve,
quello che stò per chiedere chissà quante volte è stato trattato, ho
provato a cercare le FAQ del gruppo per evitarvi questa penosissima
richiesta ma non l'ho trovato.
La domanda è questa: Come posso fare per "intercettare" la chiusura di
un programma alla pressione del tasto di chiusura (perdonatemi, non ne
conosco il termine esatto) vicino ai tasti di riduzione ad icona ed
ingrandimento ?
Ho un programma che deve essere attivo 24 ore su 24 e, in nessun caso
(solo spegnendo il PC o chiudendo Windows) deve chiudersi visto che
questo programma mi tiene in costante aggiornamento sullo stato di un
router (per farlo richiamo semplicemente l'istruzione FINGER di NT e ne
creo un TXT dal risultato ... non sono ancora in grado di poter creare
un programma indipendente da FINGER) informandomi se il router viene
accidentalmente spento in modo che io possa riattivarlo. Il problema è
dato dal fatto che i miei colleghi di lavoro, per divertimento, ogni
tanto mi chiudono il programma ...
Ringrazio chiunque mi voglia e possa darmi qualche informazione utile
...
REO

Se il programma del quale devi intercettare la chiusura è un qualsiasi EXE
del quale non hai i sorgenti allora dovresti con le API ricavarti la lista
delle applicazioni attive e cercare in quelle se la tua applicazione è
ancora attiva.
In altro modo VB dovrebbe riuscire a dirti se una finestra con un certo
titolo è attiva oppure no.Metti un timer che ogni x secondi cerca se esiste
una finestra con una determinata caption.
Altrimenti, se il programa è stato scritto in VB hai l'evento
Form_QueryUnload:
Private Sub Form_QueryUnload(cancel As Integer, unloadmode As Integer)
    select case unloadmode
        case vbFormControlMenu
            'È stato scelto il comando Chiudi dal menu di controllo del
form.
            IN QUESTO CASO RICHIEDI UNA PASSWORD DI CONFERMA DELLA CHIUSURA
            SE PASSWORD ERRATA cancel=TRUE
        case vbFormCode
            'L'istruzione Unload viene richiamata dal codice.
            QUALCHE EVENTO INTERNO AL PROGRAMMA (MAGARI A INTERVALLI
            PREDETERMINATI l'APPLICAZIONE DEVE USCIRE)
        case vbAppWindows
            'La sessione corrente dell'ambiente operativo Microsoft Windows
è conclusa.
            CHIUSURA AUTOMATICA (SI CHIUDE ANCHE NT..)
        case vbAppTaskManager
            'L'applicazione è stata chiusa tramite Task Manager di
Microsoft Windows.
            IN QUESTO CASO RICHIEDI UNA PASSWORD DI CONFERMA DELLA CHIUSURA
            (I TUOI COLLEGHI POTREBBERO ESSERE PIU' FURBI DEL PREVISTO...)
            SE PASSWORD ERRATA cancel=TRUE
        case vbFormMDIForm
            'Il form secondario MDI viene chiuso in quanto viene chiuso il
form MDI principale
            BASTA NON USARE UN FORM MDI
end select
REO ha scritto:


 [...]
Grazie 1000 max, quello che mi serviva era di intercettare il QueryUnload alla
pressione del tastino X ma con quello che mi hai suggerito potrò "bloccare"
ogni tipo di chiusura ... tranne l'eventuale mancanza di corrente !!! :-)
REO


Bel divertimento... si vede che non hanno nient'altro da fare, eh?
--
Roal Zanazzi
z...@iol.it

ingrandimento ?
Basta utilizzare la rutine 'QueryUnload' del form principale, impostando il
valore di 'Cancel' ad un valore diverso da zero per bloccare il download.
Utilizzando 'UnloadMode' č possibile sapere come č stato generato l'evento:
tramite Menů di sistema (l'icona sulla sinistra del form), Pulsante di
chiusura, ho da codice.
Comunque č tutto spiegato nella guida in linea.
Ciao e alla prossima.
Sparviero.