ciao a tutti e buon anno.
Dopo aver lanciato un processo
hStampa = Shell ("openoffice.org " & User.Home & "/report.pdf")
vorrei che il programma aspettasse la chiusura di openoffice prima di eseguire altri comandi (ovvero la richiesta di cancellazione del file report.pdf appena letto con openoffice).
risultato = SHELL "comando" WAIT
Nel mio gestionale controllo che il programma non sia già in esecuzione così:
PRIVATE FUNCTION MultiIstanza() AS Boolean
DIM Risposta AS String
SHELL "ps aux | grep " & Application.Name & ".gambas" & " | grep -wv grep | wc -l" TO Risposta
RETURN IIf(Val(Risposta) > 1, TRUE, FALSE)
END
Immagino che se a Application.Name sostituisci il nome del programma da monitorare, funzioni anche nel caso di OO.
@leo ho provato il tuo sistema e mi sembra che la riga di comando funzioni:
Shell "ps aux | grep " & "/usr/lib/openoffice/program/soffice.bin" & " | grep -wv grep | wc -l" To Risposta
Message.Info(risposta, "OK")
risposta è 1 se il prog è attivo e 0 se è chiuso
io pensavo di usarla dentro un loop subito dopo la chiamata a openoffice in modo che mi esca dal loop solo se risposta=0
dentro al loop ho verificato che lo stato di risposta cambia da 1 a 0 ma il loop non si ferma non capisco perchè
così attende la chiusura del processo di avvio di openoffice non la chiusura di openoffice
Forse....
Shell "killall nome_programma" Wait
:-[
...forse anche una cosa di questo genere: :-[
Private pr As Process
......
......
Public Sub Button1_Click()
pr.Kill
While pr.State = 1
Print "Chiusura programma in corso"
Wend
Print "Programma chiuso"
' quindi il resto del programma da processare......
End
:-X
...e anche con la sollevazione dell'evento _Kill() alla chiusura del programma gestito da "Process"....
Private pr As Process
Public Sub Button1_Click()
pr = Exec["percorso_programma"] As "processo"
End
Public Sub processo_Kill()
Print "Il processo è stato chiuso !"
' qui il resto del programma da processare.........
End