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 40
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 7392 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 40
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 74
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 40
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 74
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
Rejoignez-nous