begin process at 2012 02 10 08:54:55
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Application

 > ATTENDRE LA FIN DE L'EXÉCUTION D'UN EXE.

ATTENDRE LA FIN DE L'EXÉCUTION D'UN EXE.


 Information sur la source

Note :
9 / 10 - par 1 personne
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Application Niveau :Initié Date de création :29/05/2004 Vu :6 845

Auteur : MadLucas

Ecrire un message privé
Site perso
Commentaire sur cette source (7)
Ajouter un commentaire et/ou une note

 Description

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

Source

  • // 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)
// 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.


 Sources de la même categorie

Source avec Zip Source avec une capture CONTACTS MANAGER par eapaceinfo
Source avec Zip Source avec une capture CONTACTES BOOK par mature
Source avec Zip Source avec une capture [C++/QT] SLIDEALWAYS, RÉALISEZ DES SLIDES POUR VOTRE SITE AV... par doderic
Source avec Zip Source avec une capture MAILLAGE 3D (VTK + QT) par ammoun007
Source avec Zip Source avec une capture CONVHTML : UN UTILITAIRE DE CONVERSION POUR FICHIERS HTML par pgl10

Commentaires et avis

Commentaire de LordBob le 29/05/2004 11:49:08

tres bonne source, car en plus elle m'a permit d'apprendre à me servir un peu mieux de ShellExecute !!!

Commentaire de djl le 29/05/2004 12:16:33

non, de ShellExecuteEx

Commentaire de LordBob le 29/05/2004 12:22:39

ouais, on s'en fou c'est parce que j'ai tapé trop vite :)

Commentaire de victorcoasne le 15/06/2004 13:03:38

Comment fait-on pour lancer simplement un programme (pas une image) attendre sa fin puis continuer ?

Commentaire de papillon2000 le 02/03/2009 23:24:49

moi aussi je cherche comment attendre la fin d'une tache pour lancer une autre.

Commentaire de victorcoasne le 03/03/2009 22:16:38

Tu liste les process et tu récupère le hProcess du processus que tu veux.
Puis tu fais un WaitForSingleObject(hProcess, INFINITE);

Commentaire de Godzestla le 19/05/2011 15:56:35

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
   }

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,577 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales