Détecter fermeture fenêtre MSDos

Résolu
Asghaard
Messages postés
13
Date d'inscription
mardi 27 avril 2004
Statut
Membre
Dernière intervention
31 août 2006
- 25 août 2006 à 10:56
Asghaard
Messages postés
13
Date d'inscription
mardi 27 avril 2004
Statut
Membre
Dernière intervention
31 août 2006
- 31 août 2006 à 15:08
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

cs_casy
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
25 août 2006 à 11:18
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 #
3
Asghaard
Messages postés
13
Date d'inscription
mardi 27 avril 2004
Statut
Membre
Dernière intervention
31 août 2006

31 août 2006 à 15:08
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
3
Asghaard
Messages postés
13
Date d'inscription
mardi 27 avril 2004
Statut
Membre
Dernière intervention
31 août 2006

25 août 2006 à 10:59
 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 ...
0
jrivet
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
60
25 août 2006 à 11:08
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

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

30 août 2006 à 15:44
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 ?
0
cs_casy
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
30 août 2006 à 15:55
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 #
0
Renfield
Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
30 août 2006 à 15:57
en l'occurrence, pas possible de supprimer le premier message, sans supprimer le topic...

Renfield
Admin CodeS-SourceS- MVP Visual Basic
0
cs_casy
Messages postés
7741
Date d'inscription
mercredi 1 septembre 2004
Statut
Membre
Dernière intervention
24 septembre 2014
41
30 août 2006 à 16:04
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 #
0
Renfield
Messages postés
17287
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
30 août 2006 à 16:10
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
0