Attendre la fin de l'exécution d'un exe.

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 737 fois - Téléchargée 28 fois

Contenu du snippet

Voici comment attendre qu'un EXE lancé avec ShellExecuteEx se termine avant de poursuivre l'exécution du code.

Source / Exemple :


// Exécute apperçu des images Windows

string parameters = "\\shimgvw.dll,ImageView_Fullscreen ";
string rundll32 = "\\rundll32.exe";
string myImg = "c:\\test.bmp";                //Changez cette valeur pour l'image que vous voulez afficher

GetSystemDirectory((BSTR) buf1, MAX_PATH);
rundll32 = buf1 + rundll32;

//--- ici, l'image à afficher est "TEST.BMP" dans le répertoire C:parameters = buf1 + parameters + myImg;
	
SHELLEXECUTEINFO execinfo;
memset(&execinfo, 0, sizeof(execinfo));
execinfo.lpFile = rundll32.c_str();
execinfo.cbSize = sizeof(execinfo);
execinfo.lpVerb = "open";
execinfo.fMask = SEE_MASK_NOCLOSEPROCESS;
execinfo.nShow = SW_SHOWDEFAULT;
execinfo.lpParameters = parameters.c_str();
	
ShellExecuteEx(&execinfo);
WaitForSingleObject(execinfo.hProcess, INFINITE);

//Vous pouvez mettre une nouvelle valeur à la place de INFINITE afin de configurer un "time-out"  (millisecondes)

Conclusion :


Voilà. C'est relativement simple. ShellExecuteEx va fournir les infos à SHELLEXECUTEINFO execinfo... Utilisez ensuite execinfo pour identifier le hProcess avec la fonction WaitForSingleObject.

Vous pouvez mettre ce code n'importe où dans un projet existant. Lorsque "Apperçu des images Windows" est lancé avec le ShellExecuteEx, votre APP attendra que ce dernier se termine avant de continuer l'exécution de votre code.

A voir également

Ajouter un commentaire

Commentaires

Messages postés
9
Date d'inscription
lundi 6 décembre 2010
Statut
Membre
Dernière intervention
19 mai 2011

Bonjour,

en modifiant la fin du code on peut tester si le programme appelé s'est terminé normalleme,nt ou pas (Cancel par exemple).

if (ShellExecuteEx(&execinfo)) {
WaitForSingleObject(execinfo.hProcess, INFINITE);
// Fin Normale
}
else {
// fin anormale
}
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
5
Tu liste les process et tu récupère le hProcess du processus que tu veux.
Puis tu fais un WaitForSingleObject(hProcess, INFINITE);
Messages postés
94
Date d'inscription
dimanche 30 avril 2006
Statut
Membre
Dernière intervention
21 juin 2010

moi aussi je cherche comment attendre la fin d'une tache pour lancer une autre.
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
5
Comment fait-on pour lancer simplement un programme (pas une image) attendre sa fin puis continuer ?
Messages postés
2865
Date d'inscription
samedi 2 novembre 2002
Statut
Membre
Dernière intervention
11 mai 2009
10
ouais, on s'en fou c'est parce que j'ai tapé trop vite :)
Afficher les 7 commentaires

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.