J'apporte une correction a une source deja existante sur ce site et diffusée par Dox que je remercie.
Cette fonction tres utile permet de lancer une commande Dos en mode visible ou non et d'attendre la fin de son execution avant de continuer le code VB de votre appli.
La correction apportée est le lngReturn = CloseHandle(flFin) et bien sur la déclaration de l'API CloseHandle car la source originale de Dox ne fonctionnait pas sur un OS XP.
Source / Exemple :
'a mettre dans votre Form
Dim flExecutionOK As Boolean
'execution de test.bat en mode non visible sinon mettre True
flExecutionOK = ExecuterCommandeDOS("c:\test.bat", False)
' a mettre dans un module
Option Explicit
Private Const PROCESS_QUERY_INFORMATION = &H400
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Declare Function CloseHandle Lib "Kernel32.dll" (ByVal Handle As Long) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Function ExecuterCommandeDOS(commandeDOS As String, Mode As Boolean) As Boolean
Dim codeRetour As Double 'Code retour de la commande Shell
Dim flFin As Long
Dim lngReturn As Long
ExecuterCommandeDOS = False
On Error GoTo Fin
If Mode = True Then
codeRetour = Shell(commandeDOS, vbNormalFocus)
Else
codeRetour = Shell(commandeDOS, vbHide)
End If
If codeRetour > 0 Then
'Boucle d'attente de la fin d'exécution
Do
flFin = OpenProcess(PROCESS_QUERY_INFORMATION, False, codeRetour)
' Attente 200 millisecondes afin de ne pas consommer tout le temps CPU
lngReturn = CloseHandle(flFin)
Sleep (200)
DoEvents
Loop While flFin <> 0
ExecuterCommandeDOS = True
End If
Fin:
End Function
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.