Ciao a tutti, avrei bisogno di un qualche info sull'oggetto Process.
Da quanto ho letto nella guida in linea di gambas, se richiamo un programma esterno tramite il comando shell o exec, viene generato un oggetto ti tipo process.
Mettiamo per esempio di eseguire questo codice:
PUBLIC hprocess as process
PUBLIC SUB Button1_Click()
hprocess = SHELL "gedit"
END
PUBLIC SUB Button2_Click()
hprocess.Close()
END
Con la SUB del button1 apro gedit, mentre con la sub del button2 vorrei chiudere gedit, ma questo non avviene.
Cosa sto sbagliando???
La sintassi corretta del processo dovrebbe essere
hprocess = SHELL "comando" AS "hprocess"
Fatto ciò puoi gestire hprocess...
Un mio piccolo riassunto :)
PRIVATE hProc AS Process
PUBLIC SUB Button1_Click()
'Scateno l'evento Read
hProc = EXEC ["ps", "aux"] FOR READ AS "Proc"
'Scateno l'evento Error
hProc = EXEC ["cat", "/quaicos"] FOR READ AS "Proc"
END
PUBLIC SUB Button2_Click()
'.State legge lo stato del processo
IF hProc.State = hProc.Running THEN
'se il processo è in esecuzione
ELSE IF hProc.State = hProc.Stopped THEN
'se il processo non è in esecuzione
ELSE IF hProc.State = hProc.Crashed THEN
'se il processo si è 'schiantato'
ENDIF
hProc.Kill() 'Chiude l'appicazione
hProc.Close() 'Chiude lo stream
'Mi è capitato di dover usare hProc = NULL per chiudere
'l 'applicazione in quanto .Kill() non aveva avuto effetto.
END
PUBLIC SUB Proc_Read()
DIM s AS String
'Lettura dell'output del terminale
READ #LAST, s, -256
PRINT s
END
PUBLIC SUB Proc_Kill()
'Evento che si scatena alla chiusura del processo
PRINT "Ho Chiuso il Processo"
END
PUBLIC SUB Proc_Error(Errore AS String)
'Evento che si scatena ad un errore del processo
PRINT Errore
END
Grazie milio, con il codice da te suggerito funziona.
Cmq utilizzando il comando SHELL non sembra possibile gestire il processo.
Purtroppo dovrò rivedere tutto la parte di codice che si occupava si creare la stringa da far eseguire a SHELL
dato che dovrò usare EXEC. Ciao e grazie.
' Gambas class file
PRIVATE hprocess AS Process
PUBLIC SUB _new()
END
PUBLIC SUB Form_Open()
END
PUBLIC SUB Button1_Click()
hprocess = EXEC ["gedit"]
END
PUBLIC SUB Button2_Click()
hprocess.Close()
hprocess.Kill()
END
Grazie milio, con il codice da te suggerito funziona.
Cmq utilizzando il comando SHELL non sembra possibile gestire il processo.
Non è vero...io uso sempre SHELL e leggo i processi....
Il mio codice di prima era sbagliato perchè mi ero dimenticato una cosa...andavo a memoria...
hprocess = SHELL "comando" FOR READ AS "hprocess"