Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [VB] Inetercettare la chiusura di un'applicazione

    Ciao a tutti, ho creato un eseguibile in vb che può essere chiuso (in modo molto brutale) da un'altra applicazione tramite TerminateProcess.
    Qualcuno sa se è possibile intercettare la chiusura all'interno dell'eseguibile che viene chiuso? Io pensavo che si potesse fare all'interno di Form_Terminate(), ma sembra che non funzioni....

  2. #2
    mi rivendo un suggerimento di Berello.

    Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)

    Dim msg 'Dichiara la variabile.
    If UnloadMode > 0 Then
    'Se si esce dall'applicazione.
    msg = "Uscire dall'applicazione?"
    Else
    'Se si chiude il form.
    msg = "Chiudere il form?"
    End If

    ' Interrompe QueryUnload se viene scelto No.
    If MsgBox(msg, vbQuestion + vbYesNo, Me.Caption) = vbNo Then Cancel = True

    End Sub

    oppure anche solo:

    Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)

    Dim msg 'Dichiara la variabile.

    msg = "Uscire dall'applicazione?"
    ' Interrompe QueryUnload se viene scelto No.
    If MsgBox(msg, vbQuestion + vbYesNo, Me.Caption) = vbNo Then Cancel = True Else End

    End Sub

    con questo codice intercetti sicuramente la combinazione Alt+F4 e la chiusura dal bottone "X" del form.
    Volevi questo?

    05.08.2005 - by alka
    Auguri all'angelo custode dei moderatori.

  3. #3
    Utente di HTML.it L'avatar di darkblOOd
    Registrato dal
    Jul 2001
    Messaggi
    2,212

    Re: [VB] Inetercettare la chiusura di un'applicazione

    Originariamente inviato da riky78
    Ciao a tutti, ho creato un eseguibile in vb che può essere chiuso (in modo molto brutale) da un'altra applicazione tramite TerminateProcess.
    Qualcuno sa se è possibile intercettare la chiusura all'interno dell'eseguibile che viene chiuso? Io pensavo che si potesse fare all'interno di Form_Terminate(), ma sembra che non funzioni....
    l'evento Query_Unload scatta prima dell'evento Terminate e tralaltro ti permette di annullare il processo impostando CANCEL=TRUE

  4. #4
    no, il problema è che la chiusura del processo viene fatta da un'altra applicazione tramite TerminateProcess e sembra che questo non generi nessun evento sull'applicazione chiusa....

  5. #5
    Utente di HTML.it L'avatar di darkblOOd
    Registrato dal
    Jul 2001
    Messaggi
    2,212
    già, allora penso che dovresti monitorare i processi attivi, tirarti fuori il process ID della tua applicazione e verificare quando viene terminato



    penso

  6. #6
    quello non è un problema visto che sono io, con un'altra applicazione a terminarla, il problema è che lei prima di essere terminata non può fare niente... io vorrei che lei prima di chiudersi scriva in un file qualcosa tipo "OHHH, mi hanno chiso!!"...

  7. #7
    Utente di HTML.it L'avatar di vonkranz
    Registrato dal
    Sep 2001
    Messaggi
    1,387

    scusate l'intrusione....

    Preso pari/pari dall'help di VB

    Evento QueryUnload


    Viene generato prima che un form o un'applicazione vengano chiusi. Quando un oggetto MDIForm viene chiuso, viene generato un evento QueryUnload prima per ilform MDI e quindi per tutti iMDI secondari. Se l'evento non viene annullato in uno dei form, viene generato un evento Unload prima in tutti i form e quindi in un form MDI. Quando un form secondario o un oggetto Form viene chiuso, l'evento QueryUnload viene generato prima dell'evento Unload del form.

    Sintassi

    Private Sub Form_QueryUnload(cancel As Integer, unloadmode As Integer)

    Private Sub MDIForm_QueryUnload(cancel As Integer, unloadmode As Integer)

    La sintassi dell'evento QueryUnload è composta dalle seguenti parti:

    Parte Descrizione
    cancel Intero. Se il valore è diverso da 0, l'evento QueryUnload viene interrotto in tutti i form caricati, impedendo che il form o l'applicazione vengano chiusi.
    unloadmode Valore o costante che indica la causa che ha generato l'evento QueryUnload, come indicato nella sezione "Valori restituiti".


    Valori restituiti

    L'argomento unloadmode restituisce i seguenti valori:

    vbFormControlMenu =0 È stato scelto il comando Chiudi dal menu di controllo del form.
    vbFormCode =1 L'istruzione Unload viene richiamata dal codice.
    vbAppWindows =2 La sessione corrente dell'ambiente operativo Microsoft Windows è conclusa.
    vbAppTaskManager =3 L'applicazione è stata chiusa tramite Task Manager di Microsoft Windows.

    vbFormMDIForm =4 Il form secondario MDI viene chiuso in quanto viene chiuso il form MDI principale.
    vbFormOwner =5 Il form viene chiuso in quanto viene chiuso il proprietario.


    Queste costanti sono elencate nellalibreria degli oggetti di Visual Basic (VB) nelVisualizzatore oggetti.

    Osservazioni

    Questo evento viene in genere utilizzato per verificare che non vi siano operazioni non completate nei form prima che un'applicazione venga chiusa. Se, ad esempio, i dati di un form non sono stati salvati, verrà visualizzato un messaggio in cui si chiede di salvare i dati.

    Quando un'applicazione viene chiusa, è possibile utilizzare la routine dell'evento QueryUnload o Unload per impostare la proprietà Cancel su True e interrompere quindi il processo di chiusura dell'applicazione. Mentre l'evento QueryUnload viene generato in tutti i form prima che uno di essi venga scaricato, l'evento Unload viene generato ogni volta che un form viene scaricato.
    Penso cmq che tu debba intercettare questo evento in tutti i form della tua applicazione ammesso e non concesso che tu non sappia a priori qual e' il form attivo al momento della chiusura
    ...and I miss you...like the deserts miss the rain...

  8. #8
    Ho provato anche con quello ma non fuziona... l'evento non viene generato oppure non viene intercettato.
    Forse TerminateProcess chiude l'applicazione così brutalmente che non gli consente di fare niente, ma mi sembra strano...

  9. #9
    Se fai una ricerca nel forum, per utente ANS, troverai un interessante intervento sul subclassing, utile in questo caso...



    BYE.

  10. #10

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.