Détecter fermeture fenêtre MSDos

[Résolu]
Signaler
Messages postés
13
Date d'inscription
mardi 27 avril 2004
Statut
Membre
Dernière intervention
31 août 2006
-
Messages postés
13
Date d'inscription
mardi 27 avril 2004
Statut
Membre
Dernière intervention
31 août 2006
-
Bonjour,

Après avoir longuement cherché, j'en arrive à vous poser la question :

Comment détecter la fin du procédure en MSDOS

j'utilise la commande 
Shell "cmd.exe /C NomDeMonProgrammeOptionsDeMonProgramme", vbNormalFocus

le programme sous DOS s'éxecute mais j'aimerai que les macros sous Excel se mettent en pause le temps que la fenêtre DOS se termine.

Pour le moment, la seule parade que j'ai trouvé c'est d'affiché une MsgBox avant de lancer le programme en DOS et d'attendre que la fenêtre DOS se ferme pour appuyer sur [OK] pour continuer la macro.

Je ne veux pas utilsier de tempo étant donné que le programme sous DOS éxécute des calculs qui mettent un temps très variable à se faire. (de 1 minute à 15 minutes voir qques heures)

Qques indices recueillis :
j'ai lu des trucs où il était question de TerminateProcess ... de Handle ... ça me parle pas vraiment ...

9 réponses

Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
Je te propose une autre version :

Dim pid As Long
Dim phnd As Long

Me.Hide
pid = Shell(cmd /C NomDuProgramme, vbNormalFocus)

If pid <> 0 Then
    phnd = OpenProcess(SYNCHRONIZE, 0, pid)
    If phnd <> 0 Then
        Call WaitForSingleObject(phnd, INFINITE)
        Call CloseHandle(phnd)
    End If
End If

Me.Show

avec les déclaration suivantes :
Public Const INFINITE = &HFFFFFFFF      '  Infinite timeout
Public Const SYNCHRONIZE = &H100000
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Dans cette version le process est completement suspendu, l'execution du code est mis en pause, il n'est libéré que par la fermeture de la fenetre DOS

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Messages postés
13
Date d'inscription
mardi 27 avril 2004
Statut
Membre
Dernière intervention
31 août 2006

la réponse apporter par Casy fonctionne très bien, j'ai juste eu à ajouter des guillements :




pid = Shell("cmd /C NomDuProgramme", vbNormalFocus)



Merci beaucoup
Messages postés
13
Date d'inscription
mardi 27 avril 2004
Statut
Membre
Dernière intervention
31 août 2006

 je suis désolé pour la taille de police utilisé !!





je reposte :



Bonjour,

Après avoir longuement cherché, j'en arrive à vous poser la question :

Comment détecter la fin du procédure en MSDOS

j'utilise la commande 
Shell "cmd.exe /C NomDeMonProgrammeOptionsDeMonProgramme", vbNormalFocus

le programme sous DOS s'éxecute mais j'aimerai que les macros sous Excel se mettent en pause le temps que la fenêtre DOS se termine.

Pour le moment, la seule parade que j'ai trouvé c'est d'affiché une MsgBox avant de lancer le programme en DOS et d'attendre que la fenêtre DOS se ferme pour appuyer sur [OK] pour continuer la macro.

Je ne veux pas utilsier de tempo étant donné que le programme sous DOS éxécute des calculs qui mettent un temps très variable à se faire. (de 1 minute à 15 minutes voir qques heures)

Qques indices recueillis :
j'ai lu des trucs où il était question de TerminateProcess ... de Handle ... ça me parle pas vraiment ...
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
58
Salut,
Je pense que tu devrais regarder cette source de : crenaud76

EXECUTION DE COMMANDE ET ATTENTE DE FIN

Note: J'ai juste tapé:  wait end Shell vb6 dans google et c'etait le 2eme lien

@+, Julien
Messages postés
13
Date d'inscription
mardi 27 avril 2004
Statut
Membre
Dernière intervention
31 août 2006

Merci pour vos réponses, j'essayerai ça et je vous dirai si cela fonctionne.

PS : y'a pas moyen d'éditer ou supprimer ses propres messages ?
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
Non c'est pas prevu. Si tu veux vraiment supprimer un message, tu contacte un admin en lui donnant tes raisons et le lien sur le message. C'est lui qui jugeras la pertinence de ta demande.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
en l'occurrence, pas possible de supprimer le premier message, sans supprimer le topic...

Renfield
Admin CodeS-SourceS- MVP Visual Basic
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
Et l'éditer tu ne peux pas ? recopier le second dans le premier et supprimer le second ?

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
69
non, pas possible (à mon niveau) d'editer : je n'ai pas accès a la base de données ^^

Renfield
Admin CodeS-SourceS- MVP Visual Basic