Autore Topic: [Risolto] Programma che avvia altro Programma  (Letto 1502 volte)

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
[Risolto] Programma che avvia altro Programma
« il: 02 Aprile 2019, 19:14:52 »
Ciao raga
devo fare una cosa del genere, 2 programmi gambas A e B
A è semplice, composto da un timer che ogni tanto deve controllare se B è in esecuzione, se non è in esecuzione lo avvia.
l'unica cosa che non so come fare in A il controllo se B è in esecuzione.
Mi date qualche dritta come risolvere
« Ultima modifica: 03 Aprile 2019, 22:45:01 da dex »

Offline Gianluigi

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 4.244
  • Tonno verde
    • Mostra profilo
Re:Programma che avvia altro Programma
« Risposta #1 il: 02 Aprile 2019, 19:52:33 »
Potresti dare un'occhiata a questa lezione:
https://www.gambas-it.org/wiki/index.php?title=Inviare_dati_da_un_programma_Gambas_ad_un_altro_mediante_le_risorse_del_Componente_DBus

Poi ci sarebbe anche gb.net ma non ci ho ancora capito molto, c'è appena stata una discussione sulla ML...
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:Programma che avvia altro Programma
« Risposta #2 il: 02 Aprile 2019, 23:25:45 »
« 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:Programma che avvia altro Programma
« Risposta #3 il: 03 Aprile 2019, 13:44:28 »
Si ha ragione vuott, ho recuperato dalla wiki e da passate discussioni del codice da lui postato e ho messo insieme questo esempio.
Per fare una prova di questo codice occorre creare nella nostra cartella (directory) home una nuova cartella e nominarla ProgrammaConControllo.
Avviamo l'IDE di Gambas e creiamo un semplice programma grafico (non importa dove lo salviamo) che nomineremo ProgB in cui ci limiteremo a scrivere B nella Proprietà Text di FMain.form.
Quindi da Progetto > Crea > Eseguibile... navighiamo fino alla cartella appena creata (ProgrammaConControllo) e salviamo l'eseguibile al suo interno.
Sempre dalla IDE creiamo un nuovo programma grafico che nomineremo ProgA dove in FMain.class copieremo il seguente codice.
Codice: [Seleziona]
Public Sub Form_Open()

  Dim iID As New Integer[]
  Dim sPath As String = User.Home &/ "ProgrammaConControllo"

  If Exist(sPath) Then
    Message.Info("#La directory esiste")
    iID = Desktop.FindWindow("B")
    sPath &= "/ProgB.gambas"
    If iID.count = 0 Then
      Try Exec [sPath] Wait
      If Error Then Message.Info("#L'applicazione non esiste!")
    Else If iID.count > 0 Then
      Message.Info("#L'applicazione è già avviata!")
    End If
  Endif
  Message.Info("#Mi sto chiudendo")
  Me.Close

End
Come per il programma B creiamo l'eseguibile salvandolo in ProgrammaConControllo.
Fatto.
Chiudiamo l'ide e dalla cartella ProgrammaConControllo avviamo il programma A (ProgA) per verificarne il funzionamento.

P.S. Molto probabilmente il New in Dim iID è superfluo...
« Ultima modifica: 03 Aprile 2019, 14:00:31 da Gianluigi »
nuoto in attesa del bacio di una principessa che mi trasformi in un gambero azzurro

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re:Programma che avvia altro Programma
« Risposta #4 il: 03 Aprile 2019, 20:40:21 »
Gian
ho letto anche il link di vuot e mi porta a un codice dove basta individuare il Pid

che differenza c'è con quello che hai postato tu?

Offline naderit

  • Grande Gambero
  • ***
  • Post: 140
    • Mostra profilo
Re:Programma che avvia altro Programma
« Risposta #5 il: 03 Aprile 2019, 21:48:03 »
ciao. non so se è una stupidaggine ma se il programma B va a leggere o scrivere in un file di testo di una determinata cartella e il programma A verifica l'accesso al quel determinato file, può essere una soluzione?  :ciao:

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re:Programma che avvia altro Programma
« Risposta #6 il: 03 Aprile 2019, 22:07:18 »
ciao. non so se è una stupidaggine ma se il programma B va a leggere o scrivere in un file di testo di una determinata cartella e il programma A verifica l'accesso al quel determinato file, può essere una soluzione?  :ciao:

può essere una soluzione ma non sempre funziona.
Programma B si avvia e scrive 1 nel file, si chiude e scrive 0, tutto ok
Programma B va in tilt e Crash, nel file resta 1

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re:Programma che avvia altro Programma
« Risposta #7 il: 03 Aprile 2019, 22:31:45 »
Gian
ho provato il tuo codice mi da
Codice: [Seleziona]
Simbolo Sconosciuto FindWindow nella classe Desktop


poi ho provato il codice postato da vuott, il codice funziona solo che non controlla se è in esecuzione e mi avvia molte istanze

Codice: [Seleziona]
Private hp As Process
Private pid As Integer

Public Sub Button1_Click()

 hp = Shell "nome_programma"

' Individuiamo il numero del PID, che sarà uguale al valore di .Id + 1 :   [Nota 3]
   pid = hp.Id + 1

   Print pid

End

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re:Programma che avvia altro Programma
« Risposta #8 il: 03 Aprile 2019, 22:44:27 »
Scusa Gian
errore mio mi ero dimenticato di attivare Gb.Desktop

il tuo codice funziona
metto risolto

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:Programma che avvia altro Programma
« Risposta #9 il: 03 Aprile 2019, 22:50:52 »

poi ho provato il codice postato da vuott, il codice funziona solo che non controlla se è in esecuzione

Lega quel codice a questa soluzione:

https://www.gambas-it.org/wiki/index.php?title=Elencare_il_PID_ed_il_corrispondente_nome_di_ciascun_processo_attivo
« Ultima modifica: 03 Aprile 2019, 22:53:31 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 dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re:[Risolto] Programma che avvia altro Programma
« Risposta #10 il: 03 Aprile 2019, 22:51:54 »
Ho risposto troppo presto

finche il codice era in Open funzionava,attivando A partiva B, chiudendo A si Chiudeva B

ora che ho spostato il codice nel timer,  A mi avvia una nuova istanza di B ad ogni ciclo del Timer

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:[Risolto] Programma che avvia altro Programma
« Risposta #11 il: 03 Aprile 2019, 22:54:35 »
...e... quindi ?   
« 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 dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re:[Risolto] Programma che avvia altro Programma
« Risposta #12 il: 03 Aprile 2019, 23:01:53 »
Vuott mi riferivo al codice di Gianluigi

quello che hai postato tu mi trova tutti i pid attivi, ma come faccio a sapere il pid della mia applicazione B?

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.723
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:[Risolto] Programma che avvia altro Programma
« Risposta #13 il: 03 Aprile 2019, 23:05:56 »
Con il primo codice che tu hai scelto dalla wiki lanci il programma esterno e ne conosci il PID.

Con il secondo puoi verificare se quel PID è presente fra quelli ritornati.

Devi insomma sapientemente combinare i due codici.
« 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 dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re:[Risolto] Programma che avvia altro Programma
« Risposta #14 il: 03 Aprile 2019, 23:08:37 »
Con il primo codice che tu hai scelto dalla wiki lanci il programma esterno e ne conosci il PID.

Con il secondo puoi verificare se quel PID è presente fra quelli ritornati.

Devi insomma sapientemente combinare i due codici.

Buona idea, avvio memorizzo il pid e con il timer controllo se quel pid è attivo