ShellFunction




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:










( shellfunction.html )- by Paolo Puglisi - Modifica del 17/12/2023