ChildApp




Const STILL_ACTIVE As Long = &H103
Const PROCESS_QUERY_INFORMATION As Long = &H400
Const vbhNull As Long = 0
Declare Function OpenProcess Lib "kernel32" _
(ByVal dwDesiredAccess As Long, ByVal bInheritHandle _
As Long, ByVal dwProcessID As Long) As Long
Declare Function GetExitCodeProcess Lib "kernel32" _
(ByVal hProcess As Long, lpExitCode As Long) As Long
Declare Function CloseHandle Lib "kernel32" _
(ByVal hObject As Long) As Long
'Ritorna vero se un processo figlio avviato con Shell sta

'girando e falso se ha terminato. Il parametro e' l'handle

'restituito da Shell

Public Function IsChildRunning(ByVal idProg As Long) As Boolean
Dim hProc As Long, iRet As Long
'Prende l'handle di processo

hProc = OpenProcess(PROCESS_QUERY_INFORMATION, False, idProg)
'Controlla lo stato del processo

If hProc <> vbhNull Then GetExitCodeProcess hProc, iRet
IsChildRunning = (iRet = STILL_ACTIVE)
CloseHandle hProc
End Function

Possiamo usare le funzioni API per la gestione dei processi per
determinare se un processo avviato con la funzione Shell e'
attivo oppure no. Shell restituisce un cosiddetto ID di
processo dal quale possiamo ricavare un handle di processo
usando la API OpenProcess.
Passando l'handle alla API GetExitCodeProcess otteniamo un
codice che indica lo stato in cui si trova il nostro processo
figlio. Terminata l'operazione bisogna chiudere l'handle con
la API CloseHandle.










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