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

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

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.