Synchroniser l'execution d'une tache dos avec un programme vb v2

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 495 fois - Téléchargée 35 fois

Contenu du snippet

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

A voir également

Ajouter un commentaire

Commentaires

ElFigo
Messages postés
3
Date d'inscription
mardi 12 août 2003
Statut
Membre
Dernière intervention
20 octobre 2004
-
tu as aussi le site AllApi http://www.mentalis.org/index2.shtml qui reprend les api et des exemples pour VB
BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16 -
http://perso.wanadoo.fr/persans-brunews/
CP5.zip et CP5Sources.zip
JR4.zip et JR4Sources.zip
Les 2 bouquins indispensables mais c'est fait pour le C.
Pour la totale de l'API win32, MSDN y a pas mieux.
cs_AbriBus
Messages postés
492
Date d'inscription
jeudi 28 août 2003
Statut
Membre
Dernière intervention
25 avril 2007
5 -
Puisque je vois qu'ici on fait joujou avec, quelqu'un pourrait-il me donner des infos ou un site, ou meme mieux, de la doc sur les APIs Windows ?
BruNews
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
16 -
CreateProcess(...) et WaitForSingleObject(...) pour ne rien consommer et sans boucle.

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.