Dim hPrg As Long
Dim hProc As Long Dim iRet As Long hPrg = Shell("Word.Exe") hProc = OpenProcess(PROCESS_ALL_ACCESS, False, hPrg) If hProc <> hNull Then IRet = WaitForSingleObject(hproc, INFINITE) CloseHandle hProc End If 'Spesso pero' non si vuole stare ad aspettare senza far nulla, 'ma si vuole sapere quando l'applicativo eseguito ha finito. 'Questo lo si puo' fare utilizzando la funzione API 'GetExitCodeProcess: Dim hPrg As Long Dim hProc As Long Dim iRet As Long hPrg = Shell("Word.Exe") hProc = OpenProcess(PROCESS_ALL_ACCESS, False, hPrg) If hProc <> hNull Then GetExitCodeProcess hProc, iRet If iRet = STILL_ACTIVE Then ' applicazione ancora in esecuzione End If End If La funzione Shell del VB permette l'esecuzione di altri applicativi dal proprio programma. Questa funzione pero' da' per scontato che stiate mandando in giro un applicativo figlio per svolgere qualche compito in modo indipendente e che non vi interessi piu' quello che fa. Se il vostro programma dipende dai risultati dell'applicativo figlio, dovreste svolgere un po' di lavoro in piu' per stabilire quando l'applicativo e' terminato. In generale i programmi scritti per Windows girano in modo asincrono, cioe' contemporaneamente ad altri applicativi senza preoccuparsi minimamente di quello che gli altri applicativi stanno facendo. Per eseguire gli applicativi in modo sincrono, cioe' eseguire un applicativo ed aspettare che esso sia terminato prima di procedere con altre operazioni, utilizzando la funzione shell si dovra' scrivere qualche linea di codice in piu'. La documentazione del VB dice che Shell restituisce un identificativo di task dell'applicativo avviato, utilizzando le funzioni API OpenProcess, CloseHandle, WaitForSingleObject e l'identificativo di task e' possibile fare in modo che il programma attenda che l'applicativo eseguito sia terminato prima di procedere: |