Comme ceci par exemple :
Private Function ShellWait(ByVal CmdLine As String) As Integer
Dim Proc As PROCESS_INFORMATION
Dim Start As STARTUPINFO
Dim lgRet As Long
'
' ... paramètre la structure ...
'
Start.cb = Len(Start)
'
' ... créé un process et récupère un handle ...
'
lgRet = CreateProcessA(0&, CmdLine, 0&, 0&, 1&, NORMAL_PRIORITY_CLASS, 0&, 0&, Start, Proc)
'
' ... actualise la barre de progression ...
'
Progression.Value = 50
DoEvents
'
' ... attends que le processus soit terminé ...
'
Do
'
' ... teste si le processus n'est pas déjà terminé ...
'
If lgRet = WAIT_OBJECT_0 Then Exit Do
DoEvents
'
' ... attribut à lgret la valeur d'état du processus de la fonction ...
'
lgRet = MsgWaitForMultipleObjects(1&, Proc.hProcess, 0&, 1000, QS_ALLINPUT)
Loop
'
' ... ferme le handle ...
'
Call CloseHandle(Proc.hProcess)
'
' ... retourne 0 si le processus est terminé ...
'
ShellWait = lgRet
End Function