Comment lancer un programme de façon synchrone depuis un programme VB? Comment attendre la fin de l'exécution d'un programme lancé depuis VB?
Dans l'article Comment exécuter un autre programme depuis une application VB ?, on a présenté plusieurs façons simples de lancer un autre programme depuis un programme VB. Dans les exemples présentés, les lancements se faisaient de façon asynchrone, c'est à dire que le programme était lancé depuis VB, puis le programme VB continuait son exécution.
On peut aussi vouloir lancer une application et attendre la fin de son exécution pour continuer. On parle dans ce cas de lancement synchrone.
Pour cela, on utilise ShellExecute et les API OpenProcess et WaitForSingleObject.
La fonction suivante, "ShellWait", est un exemple d'implémentation de ceci :
Option Explicit
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function SetEnvironmentVariable Lib "kernel32" Alias "SetEnvironmentVariableA" (ByVal lpName As String, ByVal lpValue As String) As Long
Private Function ShellWait(ByVal vCommand As String) As Boolean
Dim mProcess As Long
Dim mRet As Long
Dim mPID As Long
Dim bRet As Boolean
On Error GoTo ShellWait_Error
mPID = Shell(vCommand, vbMinimizedNoFocus)
mProcess = OpenProcess(&H1F0FFF, 0, mPID)
Do
mRet = WaitForSingleObject(mProcess, 1000)
If mRet <> &H102& Then
bRet = True
Exit Do
End If
DoEvents
Loop
CloseHandle mProcess
ShellWait_OK:
On Error GoTo 0
Exit Function
ShellWait_Error:
bRet = False
Resume ShellWait_OK
End Function
Les fiches suivantes donnent des informations complémentaires sur l'utilisation de ces API :
Voir aussi : |
Date de publication : 25 février 2007
Dernière modification : 25 février 2007
Rubriques : Fichiers & dossiers
Mots-clés : exécution,exécuter,lancer,application,programme,lancement,synchrone,attendre,fin,WaitForSingleObject,OpenProcess |