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

Offline kicco

  • Senatore Gambero
  • ******
  • Post: 1.728
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re:Intercettare la chiusura di una applicazione
« Risposta #15 il: 26 Dicembre 2016, 16:32:10 »
Citazione
Non funziona, come del resto aveva già constatato allegfede, ti basta fare una semplice prova crei un progetto grafico
se nella routine -Clouse richiamo una routine che mi stampa in una textarea e poi metto un wait, la form aspetta a chiudersi e scrive prima nella textarea.
Devo quindi tenere attiva la subroutine fintanto che non ho finito gli altri job.
Lo so così è logica, e qul che serve è la ciccia (codice).
Ci sto pensando. :P
Citazione
.bisognerà comunque avere un secondo programma che constati la chiusura del'applicazione principale.
io ho capito che l'ultima cosa che deve accadere è la chiusura del main, e che questa deve attendere la chiusura di altri form...
Se non capisco male tu proponi un ulteriore codice che controlla la chiusura del principale.
DOMANDA: Il form che chiude tutto ed esce dal programma è per forza quello relativo alla classe d'inizio?
 :ciao:
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline kicco

  • Senatore Gambero
  • ******
  • Post: 1.728
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re:Intercettare la chiusura di una applicazione
« Risposta #16 il: 26 Dicembre 2016, 16:52:18 »
Mettendo nel form un pulsante e una TextArea:
Codice: [Seleziona]
' Gambas class file

Private bol As Boolean = False

Public Sub Form_close()
    TextArea1.text = "QQQQ"
    Repeat
        If bol = False Then
      Wait 0.1
    Endif
      Until bol = True
End

Public Sub Button1_Click()
    bol = True
  End
Così chiudo l'applicazione, ma finchè non premo il pulsante, non si chiude...
È una stupidata? :P
 :ciao:
« Ultima modifica: 26 Dicembre 2016, 17:29:00 da kicco »
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 #17 il: 26 Dicembre 2016, 17:37:56 »
Scusa Kicco, ma sei sicuro di aver inquadrato il problema?
Qui si sta parlando di ottenere comunicazione della chiusura di un programma dal pulsante rosso quadrato sito nella toolbar della IDE di Gambas.
Mi sa che hai frainteso il pulsante  ;D

 :ciao: :ciao:
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 #18 il: 26 Dicembre 2016, 17:46:43 »
Citazione
ma sei sicuro di aver inquadrato il problema?
no, non sono sicuro! :P
Quando chiudi il form con il pulsantino rosso, con il mio codice puoi effettuare prima dell'effettiva chiusura una serie di operazione che credo fosse quello che chiedeva Allegfede!
Lui faceva l'esempio del di libreoffice, se chiudi prima dì aver salvato, lui ti avvisa e ti permette il salvataggio.
Sbaglio?
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Intercettare la chiusura di una applicazione
« Risposta #19 il: 26 Dicembre 2016, 17:55:40 »
Mi sa che hai frainteso il pulsante 
kicco, effettivmente non è che hai premuto quello sbagliato ?    :-X

« 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 kicco

  • Senatore Gambero
  • ******
  • Post: 1.728
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re:Intercettare la chiusura di una applicazione
« Risposta #20 il: 26 Dicembre 2016, 18:01:13 »
 :D
Fammi capire qual è il pulsante, se non è quello rosso del form, è quello di chiusura del menù principale?
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Intercettare la chiusura di una applicazione
« Risposta #21 il: 26 Dicembre 2016, 18:03:31 »
Quello visibile nell'immagine sotto allegata.

Ovviamente il tasto è visibile solo quando il codice del progetto è in funzione.   
« Ultima modifica: 26 Dicembre 2016, 18:04:45 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 kicco

  • Senatore Gambero
  • ******
  • Post: 1.728
  • So dove andare, seguitemi, ci perderemo insieme!
    • Mostra profilo
Re:Intercettare la chiusura di una applicazione
« Risposta #22 il: 26 Dicembre 2016, 18:10:45 »
 :)
Allora non ho capito niente!!! :D
Ma perchè ha fatto l'esempio di un programma compilato (libreoffice) come esempio per parlare di uno in esecuzione con l'interprete?
Tu mi risponderai Chiedilo a lui!
Allegfede perchè? :D
 :ciao:
Chi ha paura muore ogni giorno, chi non ha paura muore una volta sola. (Paolo Borsellino)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Intercettare la chiusura di una applicazione
« Risposta #23 il: 26 Dicembre 2016, 21:22:09 »
Tu mi risponderai Chiedilo a lui!
Allegfede perchè?
C'è anche un'altra domanda:
lui vuole intercettare la richiesta di chiusura dell'applicazione gambas, oppure vuole terminare i processi figli che l'applicativo lancia dopo il suo avvio ?   

« 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 #24 il: 12 Gennaio 2017, 17:59:44 »
con il mio solito ritardo, vi spiego la situazione:

il programma in gambas e' player video che utilizza MPV da shell per fare la riproduzione di piu' filmati in una sequenza prefissata.
Pero' alle volte devo fare delle modifiche, delle correzioni al codice di gestione che "spara" i comandi ad mpv e devo chiudere il programma in gambas E il processo di MPV che e' diventato INDIPENDENTE.

Allora, siccome l'interfaccia NON ha il pulsante di chiusura (per evitare che l'utente finale possa accidentalmente terminare il "demone" (il mio gestore della playlist scritto in gambas), premo il pulsante STOP dell'IDE di gambas.

Vorrei che la mia applicazione capisse che il sistema operativo gli indica (gentilmente?) di terminare la sua esistenza e quindi termini tutti i processi da lui generati, per poter poi ripartire ex novo senza avere due, tre video che vengono riprodotti in contemporanea.

Per ora ho fatto il contrario, ovvero all'avvio dell'applicazione termino tutte le istanze di mpv e poi faccio ripartire il demone, ma logicamente l'effetto doveva enire prima della causa :D
Codice: [Seleziona]
Public Sub ClearSystem()
 
  WriteToSocket("stop")
 
End

......

Function WriteToSocket(comando As String) As String
Dim ritorno As String
 
  Select Case comando
    Case "add-logo"
      comando = "echo overlay-add 0 630 450 \x22/mnt/Qnap2OTVA/Tele_Galileo/LOGHI/StationLogoSD.data\x22 1 \x22bgra\x22 100 100 400 | socat - /tmp/mpvsocket"
    Case "remove-logo"
      comando = "echo overlay-remove 0  | socat - /tmp/mpvsocket"
    Case "stop"
      comando = "echo \x22stop\x22  | socat - /tmp/mpvsocket"
  End Select
 
  Shell comando To ritorno
 
  Debug ritorno
End


che pero' alle volte fallisce perche' i video in esecuzione possono essere diversi ..... more debug needed i suppose
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 #25 il: 12 Gennaio 2017, 19:30:36 »
Non so se ti può servire, in effetti non è esattamente quello che chiedi.
Faccio prima ad allegare un esempio.

 :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 #26 il: 13 Gennaio 2017, 00:16:25 »
Non so se ti può servire
Un'abile ed interessante proposta, ma allegfede, quando chiude il programma Gambas, dice che preme "il pulsante STOP dell'IDE di gambas."......


Si tratterebbe di intercettare la pressione del pulsante "STOP" dell'IDE di Gambas..... non so se mi spiego...............
Poiché in tal caso l'interruzione non avviene agendo "dal" programma lanciato, resto del parere che la sua interruzione è "osservabile" soltanto attraverso un altro programma "spione", che svolga appunto la funzione di verificare l'esistenza in ogni momento del programma Gambas principale, ed eventualmente chiudere i programmi "figli", uccidendone i processi,  aperti dal quel programma Gambas principale quando era "in vita".
« Ultima modifica: 13 Gennaio 2017, 00:47:21 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 #27 il: 13 Gennaio 2017, 09:55:26 »
Non so se ti può servire
Un'abile ed interessante proposta, ma allegfede, quando chiude il programma Gambas, dice che preme "il pulsante STOP dell'IDE di gambas."......


Si tratterebbe di intercettare la pressione del pulsante "STOP" dell'IDE di Gambas..... non so se mi spiego...............
Poiché in tal caso l'interruzione non avviene agendo "dal" programma lanciato, resto del parere che la sua interruzione è "osservabile" soltanto attraverso un altro programma "spione", che svolga appunto la funzione di verificare l'esistenza in ogni momento del programma Gambas principale, ed eventualmente chiudere i programmi "figli", uccidendone i processi,  aperti dal quel programma Gambas principale quando era "in vita".

Quanto tu dici è chiaro e appurato (anch'io avevo cercato di spiegarlo a Kicco), ma nell'ultimo post di Allegfede c'è scritto:


Allora, siccome l'interfaccia NON ha il pulsante di chiusura (per evitare che l'utente finale possa accidentalmente terminare il "demone" (il mio gestore della playlist scritto in gambas), premo il pulsante STOP dell'IDE di gambas.


e allora ho pensato che con quel trucco potrebbe variarne la dinamica (non c'è il pericolo di dare la combinazione accidentalmente) era solo un'idea in più.

 :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 #28 il: 13 Gennaio 2017, 10:05:44 »
Capisco bene; ed in effetti il vero problema - a mio avviso - è la chiusura (impropria) del programma usando il tasto Stop dall'IDE. Questa soluzione può avere senso nella mera fase di creazione del progetto (ma se lo volessi far usare ad altri utenti.... lui lo presenta utilizzabile aa livello di "progetto" ?); inoltre essa rende molto complessa la realizzazione di quanto qui allegfede ha chiesto.
« 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 #29 il: 16 Gennaio 2017, 17:44:04 »
interessante "workaround" GianLuigi, non ci avevo pensato :D

Ovvero fare nell'edito dei menu' una chiamata NASCOSTA che ha per shortcut CTRL+shift+q che lancia una procedura:
Codice: [Seleziona]
Public Sub btClose_Click()
 
  WriteToSocket("stop")
  Wait 0.2
 
  Me.Close
End

si il post effettivamente ha una doppia valenza, quella pratica a cui Gianluigi ha sopperito con un interessante suggerimento, e quella didattica a cui pensava Vuott.

che scrivo sul thread [(semi)RISOLTO] ? :D
« Ultima modifica: 16 Gennaio 2017, 17:54:50 da allegfede »
se corri, morirai stanco (motto degli sniper)