Oppure

Loading
17/03/11 9:07
Raffa50
Vorrei creare un programma che ha una listbox che contiene il percorso di alcuni programmi(che inserisci col tasto sfoglia), e quando premi il tasto i programmi selezionati si aprono. ( e fin qui tutto ok )

ma come faccio dire che se un programma (o più;) si chiude lui li deve riaprire?
aaa
18/03/11 19:18
00bullo00
Allora, per verificare l'esistenza di un processo guarda questo codice:

Private Function IsRunning(ByVal proc As String) As Boolean
    Dim oProcs As Object
    Set oProcs = GetObject("winmgmts:").ExecQuery("SELECT * FROM Win32_Process WHERE Name='" & proc & "'")
    IsRunning = (oProcs.Count > 0)
    Set oProcs = Nothing
End Function


Questa funzione è in grado di restituire vero se il processo, il cui nome gli è stato passato come parametro, è in esecuzione.
In teoria basterebbe fare così:

for i=0 to listbox.listcount
     if isrunning(Nome Processo)=false then
           shell(listbox.list(i))
     end if
next i


Per effettuare il controllo ciclicamente basterà inserirlo in un timer. Il problema è ricavarsi il nome del processo (perchè tu nella listbox hai memorizzato il percorso dei vari programmi, ed il nome del processo potrebbe essere diverso anche dal nome del programma stesso, quindi non è facile).

Un altro modo è avviarlo basandosi sul PID del processo (sarebbe il numero identificato di ogni processo). Il Pid è facilmente ricavabile dalla funzione shell (che credo userai per avviare i programmi).

Per ricavare il PID del processo quindi:
PID=shell(percorso)


Basterà quindi che, quando esegui i programmi, memorizzi tutti i pid in un vettore e poi esegui il seguente codice:

private sub timer1.timer()
for i=0 to listbox.listcount
     if isrunning(PID Processo)=false then
           shell(listbox.list(i))
     end if
next i
end sub

Private Function IsRunning(ByVal proc As String) As Boolean
    Dim oProcs As Object
    Set oProcs = GetObject("winmgmts:").ExecQuery("SELECT * FROM Win32_Process WHERE Handle='" & proc & "'")
    IsRunning = (oProcs.Count > 0)
    Set oProcs = Nothing
End Function


Ovviamente alla funzione bisognerà passargli il PID del processo, magari il vettore puoi farlo parallelo alla listbox in modo che all'indice 1 della listbox c'è il programma che vuoi controllare e all'indice 1 del vettore c'è il PID del programma che vuoi controllare.

Spero di essermi spiegato e di essere stato utile. Fammi sapere.
Ultima modifica effettuata da 00bullo00 18/03/11 19:25
aaa