Autore Topic: [DOPPIO RISOLTO] Intercettare la chiusura di una applicazione  (Letto 1496 volte)

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Qualche tempo fa' i gentili amici gambassiani mi hanno dato una mano ad intercettare la richiesta di ciusura di una applicazione (attraverso il widget X) per fare una serie di cose prima di chiudere (o rigettare proprio la chiusura).

Un po come quando si chiude Libreoffice senza aver salvato ...

Ora vorrei intercettare la richiesta di chiusura dell'applicazione gambas da parte el sistema operativo (o da parte dell'utente quando preme il pulsante STOP nell'ide di gambas).

E' possibile fare una cosa similare?

l'evento DEACTIVATE non si puo' usare, perche' viene lanciato anche semplicemente la finestra dell'app viene nascosta da altre finestre del desktop manager.
l'evento CLOSE non me lo lancia proprio ..... stranamente ....

Non so cosa inventarmi per terminare i processi figli che il mio applicativo lancia dopo il suo avvio.
« Ultima modifica: 23 Gennaio 2017, 19:27:47 da allegfede »
se corri, morirai stanco (motto degli sniper)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Intercettare la chiusura di una applicazione
« Risposta #1 il: 23 Dicembre 2016, 15:13:23 »
Non sono sicuro che possa esserti utile, ma ti potresti scaricare dalla Software farm l'ultima versione di WatchGambasDirectory.

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Intercettare la chiusura di una applicazione
« Risposta #2 il: 23 Dicembre 2016, 17:08:21 »
Ora vorrei intercettare la richiesta di chiusura dell'applicazione gambas da parte ..... dell'utente quando preme il pulsante STOP nell'ide di gambas.

l'evento DEACTIVATE non si puo' usare, perche' viene lanciato anche semplicemente la finestra dell'app viene nascosta da altre finestre del desktop manager.
Suppongo da queste due righe che, quando l'utente preme il tasto rosso dello "Stop" nell'IDE, tu voglia che l'applicazione che si sta appunto per chiudere intercetti l'evento della sua morte.    :death:

Dunque, l'Evento _Deactivate( ) sarebbe l'optimum, ma se la finestra dell'applicazione è stata abbassata, detto Evento nell'attimo della chiusura dell'applicazione non funziona.

V'è da sotolineare, qualora ve ne fosse necessità, che l'applicazione.... una volta passata a "miglior vita".... non può essere più autocosciente.
Allo stato attuale, posso dire che solo un'altra applicazione Gambas, esterna, può intercettare, registrare la chiusura, la morte dell'applicazione principale in questione.   
« Ultima modifica: 23 Dicembre 2016, 19:12:36 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:Intercettare la chiusura di una applicazione
« Risposta #3 il: 23 Dicembre 2016, 19:37:28 »
in realta' il DEACTIVATE me lo lancia anche quando metto una finestra sopra quella dell'applicazione gambas ....
per vederlo ho messo debug "deacitvate lanciato" nell'evento Form_Deactivate ....

strano eh?

si un supervisor come appunto "supervisor" (un utile app linux) potrebbe essere interessante.

Pero' pensavo che forse potrei "rovesciare" il punto di vista:
Al RIAVVIO della mia applicazione Gambas, potrei scansionare i processi (sospettamente) figli di una precedente istanza  e chiuderli (una specie di garbage collector) prima di andare a regime ....
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Intercettare la chiusura di una applicazione
« Risposta #4 il: 23 Dicembre 2016, 21:55:51 »
in realta' il DEACTIVATE me lo lancia anche quando metto una finestra sopra quella dell'applicazione gambas ....
Ma certamente non quando la finestra dell'applicazione è stata nascosta, abbassata.



si un supervisor come appunto "supervisor" (un utile app linux) potrebbe essere interessante.
Basta un'applicazioncina Gambas che periodicamente va a vedere se il processo dell'applicazione monitorata è ancora eistente.



potrei scansionare i processi (sospettamente) figli di una precedente istanza 
Scusa, ma 'sti fiji de na...... come vengono lanciati ?
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:Intercettare la chiusura di una applicazione
« Risposta #5 il: 24 Dicembre 2016, 16:52:29 »
Codice: [Seleziona]
' Gambas class file

Private Player As Process

......

Public Sub PlayFile(Path As String)
  Player = Shell "mpv \x22" & Path & "\x22 --no-osc --input-unix-socket=/tmp/mpvsocket" For Output As "Osserva"
End

 .....

Public Sub Osserva_Read()
  If Player.EndOfFile = True Then
    Debug "fine" & Time
    Else
      Player.ReadLine
  Endif
End
se corri, morirai stanco (motto degli sniper)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Intercettare la chiusura di una applicazione
« Risposta #6 il: 24 Dicembre 2016, 17:29:24 »
E una cosa così?:
Codice: [Seleziona]
' Gambas class file'

'' La proprietà Stacking su Above.
Private $bAttivo As Boolean

Public Sub Form_Deactivate()
 
  If $bAttivo = False Then Print "Hanno cliccato sull'ide allora faccio qualcosa"
 
End

Public Sub Attiva()
  ' Viene attivato dalle altre form dell'applicazione''
  $bAttivo = True
 
End

 :ciao: :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Intercettare la chiusura di una applicazione
« Risposta #7 il: 24 Dicembre 2016, 18:02:44 »
E una cosa così?:
...
 

Scusa era un'idea farlocca, sembra non possa funzionare  :nono:
A meno che tutte le altre finestre non siano di tipo dialog  ;D

 :ciao: :ciao:
« Ultima modifica: 24 Dicembre 2016, 18:14:54 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Intercettare la chiusura di una applicazione
« Risposta #8 il: 25 Dicembre 2016, 01:33:04 »
sembra non possa funzionare
Ripeto che l'uso dell'evento _Deactivate( ) non può andare bene, poiché non viene sollevato qualora la finestra interessata dell'applicazione sia stata abbassata.


Ora vorrei intercettare la richiesta di chiusura dell'applicazione gambas...

Non so cosa inventarmi per terminare i processi figli che il mio applicativo lancia dopo il suo avvio.
...ma tu quale delle due cose vuoi ?
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Intercettare la chiusura di una applicazione
« Risposta #9 il: 25 Dicembre 2016, 12:22:01 »

Ripeto che l'uso dell'evento _Deactivate( ) non può andare bene, poiché non viene sollevato qualora la finestra interessata dell'applicazione sia stata abbassata.


Se la finestra principale ha la proprietà Stacking su Above come fa a finire "abbassata"  :-\
Se sulle finestre secondarie metti un osservatore su Deactivate che lanci Attiva() funziona bene (era nella mia idea originale poi dimenticata al momento ella prova).

Fra poco vado a mettere le gambe sotto il tavolo e per un po...

Ancora Buon Natale a tutti  :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Intercettare la chiusura di una applicazione
« Risposta #10 il: 25 Dicembre 2016, 15:15:23 »
Se la finestra principale ha la proprietà Stacking su Above
Forse non sono in grado di esprimermi tecnicamente in modo preciso.

Per "abbassata" non intendo "tenere la finestra dell'applicazione al di sopra delle finestre di ogni altro programma".
Io, invece, intendo "ridurre ad icona", "minimizzare" la finestra principale.

Dunque, se la finestra dell'applicazione Gambas viene ridotta ad icona, se viene minimizzata, l'evento _Deactivate non funziona.
« Ultima modifica: 25 Dicembre 2016, 17:53:32 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Intercettare la chiusura di una applicazione
« Risposta #11 il: 26 Dicembre 2016, 11:04:34 »
Non mi ero accorto che avevi cambiato il post, si ora ho capito è vero non si può usare l'evento deactivate.
Penso occorra rivolgersi al componente gb.desktop.
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline kicco

  • Senatore Gambero
  • ******
  • Post: 1.728
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re:Intercettare la chiusura di una applicazione
« Risposta #12 il: 26 Dicembre 2016, 11:39:18 »
...e lavorare direttamente nella routine  Form_close? :-\
 :ciao:
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Intercettare la chiusura di una applicazione
« Risposta #13 il: 26 Dicembre 2016, 14:02:54 »
...e lavorare direttamente nella routine  Form_close? :-\
 :ciao:

Non funziona, come del resto aveva già constatato allegfede, ti basta fare una semplice prova crei un progetto grafico e nella routine _Close inserisci un print o un debug che scriva qualcosa e poi chiudi il progetto dall'IDE.

 :ciao:
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Intercettare la chiusura di una applicazione
« Risposta #14 il: 26 Dicembre 2016, 14:52:58 »
Penso occorra rivolgersi al componente gb.desktop.
Qualunque diavoleria si voglia utilizzare .....magari una bella Macchina del Tempo ...bisognerà comunque avere un secondo programma che constati la chiusura del'applicazione principale.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »