Autore Topic: Impedire l'avvio di un programma.gambas già avviato  (Letto 4044 volte)

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Impedire l'avvio di un programma.gambas già avviato
« Risposta #15 il: 16 Marzo 2012, 16:11:57 »
...Perché non scrivi il codice  :-[ , dunque, e ci mostri questa tua soluzione ?  ;)

Mi pare che il codice l'abbiate già scritto; secondo me si tratta solamente di togliere la MessageBox. Non ho fatto ancora alcuna prova. Comunque per gli utilizzatori di Gnome3, lo soluzione è semplicissima, perchè non occorre intervenire  nel programma; basta infatti aggiungere il programma.gambas nel lanciatore di Gnome. Sarà lo stesso Gnome3 a puntare sull'applicativo già aperto, senza che si corra alcun rischio di moltiplicare all'infinito la  sessione attiva dello stesso programma. Comunque, non appena potrò  proverò anch'io.  :D
Ciao.
:ciao:

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Impedire l'avvio di un programma.gambas già avviato
« Risposta #16 il: 16 Marzo 2012, 23:01:43 »
Citazione
settings[Application.Name & "_scn/ctrapp"] = "1"
settings[Application.Name & "_scn/ctrapp"] è solo un "contenitore", quindi quando apro il programma e supera il controllo che il contenitore non abbia il valore "1", imposto il valore "1" al contenitore in modo che se dovessi aprirlo un'altra volta (doppione) il controllo trova il valore 1, quindi si ferma. 

Scusa Golia, forse non ho capito, ma _scn/ctrapp può chiamarsi anche fantasia o no? Se no, chi è il suo proprietaro? Un'altra cosa: magari, mentra è attiva una versione del mioprogramma.gambas potrei avere la necessità di confrontare determinati effetti lanciando anche il mioprogramma dall'Ide di Gambas. Sono in grado di sapere dal settings o dalla shell se il mioprogramma già attivo è quello in formato eseguibile o no, oppure se sono entrambi attivi?
 :ciao:
:ciao:

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Impedire l'avvio di un programma.gambas già avviato
« Risposta #17 il: 17 Marzo 2012, 00:12:16 »
Citazione
Scusa Golia, forse non ho capito, ma _scn/ctrapp può chiamarsi anche fantasia o no?
Si, è solo un nome
Citazione
settings[Application.Name & "_scn/ctrapp"]
Può essere anche
Citazione
settings["pippoBaudo"]


Citazione
Sono in grado di sapere dal settings o dalla shell se il mioprogramma già attivo è quello in formato eseguibile o no, oppure se sono entrambi attivi
In questo sistema anche se apri da eseguibile o dall'ide di gambas il controllo che farà è lo stesso, è come se andasse a leggere in un database, o eseguibile o dall'ide legge sempre la stessa cosa, quindi leggerà 0 se non è mai stato aperto, e 1 se lo è stato..è solo un controllo con valori che sono io a dare all'apertura e alla chiusura. Non puoi vedere se sono entrambi attivi, almeno con questo sistema.
Ciao  :2birre:

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: Impedire l'avvio di un programma.gambas già avviato
« Risposta #18 il: 17 Marzo 2012, 15:50:36 »
@ Golia:
Premesso che io posseggo G2, ho constatato l'attivazione della proprietà settings, ho inserito il tuo codice in un programmino, ma non ha funzionato; infatti sin dal primo ed unico avvio del prgramma, ottengo la condizione di priogramma già attivo. Sembra che la if settings trovi la condizione 1 posta proprio dall'avvio corrente del programma. Se in g3 non è così, probabilmente è una limitazione in più per g2.
Ciao.
:ciao:

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Impedire l'avvio di un programma.gambas già avviato
« Risposta #19 il: 17 Marzo 2012, 18:14:37 »
@ Golia:
Premesso che io posseggo G2, ho constatato l'attivazione della proprietà settings, ho inserito il tuo codice in un programmino, ma non ha funzionato; infatti sin dal primo ed unico avvio del prgramma, ottengo la condizione di priogramma già attivo. Sembra che la if settings trovi la condizione 1 posta proprio dall'avvio corrente del programma. Se in g3 non è così, probabilmente è una limitazione in più per g2.

Io ho Gambas-3, e confermo il risultato negativo descritto da Picavbg.
« 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 vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Impedire l'avvio di un programma.gambas già avviato
« Risposta #20 il: 17 Marzo 2012, 18:48:42 »
Ho provato quest'altra soluzione (però torniamo alla Shell !):

Codice: gambas [Seleziona]

Public Sub Form_Open()

 Dim risultato As String
 Dim iRis As Byte

  Shell "ps aux | grep " & "nome_programma.gambas" & " | grep -wv grep | wc -l" To risultato
  
  iRis = CByte(Trim(risultato))
  
  If iRis > 1 Then
    FMain.Close
  Endif
  
End


...e funziona.
« Ultima modifica: 19 Marzo 2012, 19:00: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 sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re: Impedire l'avvio di un programma.gambas già avviato
« Risposta #21 il: 17 Marzo 2012, 19:28:39 »
@Golia
scusa ma la tua soluzione presenta un problemino...
quando la seconda istanza si chiude a seguito del controllo sul valore nel settings, automaticamente lo riporta a 0, questo comporta che una terza istanza si avvierà normalmente.
« Ultima modifica: 17 Marzo 2012, 19:31:16 da sotema »
L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Impedire l'avvio di un programma.gambas già avviato
« Risposta #22 il: 17 Marzo 2012, 19:36:53 »
up...
Questa funzione la uso nei miei programmi e ha sempre funzionato bene...che cavolo adesso non va più! :-\
appena ho un pò di tempo vedo che cavolo è successo..giuro, funzionava :-\ la logica è giusta

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Impedire l'avvio di un programma.gambas già avviato
« Risposta #23 il: 17 Marzo 2012, 19:42:02 »
Citazione
quando la seconda istanza si chiude a seguito del controllo sul valore nel settings, automaticamente lo riporta a 0, questo comporta che una terza istanza si avvierà normalmente.
Questo è vero e non ci avevo mai pensato/provato :-[. resta il fatto che non capisco come possa superare il controllo alla seconda apertura

Offline Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Impedire l'avvio di un programma.gambas già avviato
« Risposta #24 il: 17 Marzo 2012, 21:09:57 »
No, ci ho riprovato, funziona anche aprendo la terza istanza. la logica è giusta, è setting che secondo me non fa quello che pensavo dovrebbe fare.
Invece di usare setting ho provato a usare un file esterno, certo non è un buon metodo ma almeno ho potuto vedere che la mia logica era giusta.
Codice: gambas [Seleziona]

Private Sub scrivi(valore As String)
  Dim myfile As String
  Dim hfile As File
  myfile = User.Home & "/prova.txt"
    If myfile Then
      hFile = Open myfile For Create
      Print #hFile, valore
      Close #hFile    
    Endif
End

Private Sub leggi() As String
  Dim myfile As String
  Dim hfile As File
  Dim lettura As String
  
  myfile = User.Home & "/prova.txt"
If myfile Then
    hFile = Open myfile For Input
    Line Input #hFile, lettura
  Close #hFile
Endif  
Return lettura
End

Public Sub Form_Open()

If leggi() = "1" Then
      If Message.Warning("Il programma è già aperto", "forza apertura", "non aprire di nuovo") = 1 Then
      Else
      Me.Close
      Endif
Endif

scrivi("1")

End

Public Sub Form_Close()

scrivi("0")


End




@vuot
Citazione
Ho provato quest'altra soluzione (però torniamo alla Shell):
:ok:
« Ultima modifica: 17 Marzo 2012, 21:24:48 da Golia »

Offline sotema

  • Maestro Gambero
  • ****
  • Post: 467
    • Mostra profilo
Re: Impedire l'avvio di un programma.gambas già avviato
« Risposta #25 il: 17 Marzo 2012, 21:13:46 »
Codice: gambas [Seleziona]
Private iRun As Integer

    Public Sub Form_Open() 
       iRun = settings[Application.Name & "_scn/ctrapp"]
       Inc iRun
     If iRun > 1 Then
       Me.Close
       Else
         settings[Application.Name & "_scn/ctrapp"] = iRun
         settings.Save
     Endif 
     
    End 
     
    Public Sub Form_Close() 
    Dec iRun
    settings[Application.Name & "_scn/ctrapp"] = iRun 
    End 
L'uomo ha inventato la bomba atomica, ma nessun topo al mondo costruirebbe una trappola per topi.
Albert Einstein

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Impedire l'avvio di un programma.gambas già avviato
« Risposta #26 il: 17 Marzo 2012, 21:36:35 »
Codice: gambas [Seleziona]
Private iRun As Integer

    Public Sub Form_Open() 
       iRun = settings[Application.Name & "_scn/ctrapp"]
       Inc iRun
     If iRun > 1 Then
       Me.Close
     ......etc


Sì, ora funziona !  Mago Sotema !
« 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 Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Impedire l'avvio di un programma.gambas già avviato
« Risposta #27 il: 17 Marzo 2012, 21:47:46 »
 :ok:
grazie, il puzzle che mancava
Citazione
        settings.Save

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Impedire l'avvio di un programma.gambas già avviato
« Risposta #28 il: 17 Marzo 2012, 21:50:52 »
No, ci ho riprovato, funziona anche aprendo la terza istanza. la logica è giusta, è setting che secondo me non fa quello che pensavo dovrebbe fare.
Invece di usare setting ho provato a usare un file esterno,

Sì, Golia, funziona.
Però (lo dico per gli utenti meno esperti come me), visto il tuo codice, il file bisogna crearlo "a mano" prima di avviare il programma, se no dà errore.
« Ultima modifica: 18 Marzo 2012, 00:53:03 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 Golia

  • Senatore Gambero
  • ******
  • Post: 1.298
  • no xe mai massa tardi
    • Mostra profilo
Re: Impedire l'avvio di un programma.gambas già avviato
« Risposta #29 il: 17 Marzo 2012, 22:11:59 »
quella del file esterno è solo una prova, con la soluzione di sotema adesso funziona di nuovo anche la mia prima soluzione, basta aggiungere settings.save

edit:
Citazione
il file bisogna crearlo "a mano"
non dovrebbe
     hFile = Open myfile For Create 
a me lo ha creato da solo :rolleyes:
« Ultima modifica: 17 Marzo 2012, 22:16:20 da Golia »