18/03/11 19:18
00bullo00
Allora, per verificare l'esistenza di un processo guarda questo codice:
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ì:
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:
Basterà quindi che, quando esegui i programmi, memorizzi tutti i pid in un vettore e poi esegui il seguente codice:
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.
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