Thread et appli [Résolu]

Signaler
Messages postés
4
Date d'inscription
mardi 7 janvier 2003
Statut
Membre
Dernière intervention
4 février 2008
-
Messages postés
4
Date d'inscription
mardi 7 janvier 2003
Statut
Membre
Dernière intervention
4 février 2008
-
Bonjour,

Je suis en train de faire une petite appli qui doit lancer une autre appli win32 et attendre la fin d'un calcul pour reprendre la main.
J'ai donc utilisé un CreateProcess(NULL,(LPTSTR) MonProg.exe,0,DETACHED_PROCESS,FALSE,0,0,0,&siStart,&piInfo)...

Puis j'attends la fin en faisant un GetExitCodeProcess(piInfo.hProcess, &dwExitCode) pour fermer l'application (voir code + loin).        

- Le hic c'est que après son calcul l'appli win32 me demande si je veux quitter avec un messagebox et attend la réponse... Le dwExitCode est toujours STILL_ATIVE du coup! c'est balot !:)

Bref comment détecter que l'appli affiche son fichu messagebox et attend la réponse pour pouvoir la tuer avec un :  TerminateProcess(piInfo.hProcess, 0);  par exemple...

Une dernière question subsidiaire... apparament le
siStart.wShowWindow = SW_HIDE ne fonctionne pas car je vois l'appli s'ouvrir et m'affiche sa boite de dialogue... Pourquoi mystère ?

Bref je bloque un peu ...

Voici mon bout de code :
STARTUPINFO siStart;
siStart.dwFlags = STARTF_USESTDHANDLES;
siStart.wShowWindow = SW_HIDE
siStart.cb =sizeof(siStart);
 
PROCESS_INFORMATION piInfo;
memset(&siStart,0,sizeof(siStart));
memset(&piInfo,0,sizeof(piInfo));
 DWORD dwExitCode;

 if(CreateProcess(NULL,(LPTSTR) MonProg.exe,0,DETACHED_PROCESS,FALSE,0,0,0,&siStart,&piInfo))/
 {
       GetExitCodeProcess(piInfo.hProcess, &dwExitCode); // Vérifie l'état du process avant la boucle
       while(dwExitCode == STILL_ACTIVE)
         {
         GetExitCodeProcess(piInfo.hProcess, &dwExitCode); // Regarde si le process est fini
         WxGauge1->SetValue(tempo++); // juste pour afficher l'avancement
         }
       CloseHandle(piInfo.hProcess); 
       CloseHandle(piInfo.hThread); 
}


Merci d'avance pour vos réponses,
-FKING-

3 réponses

Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
14
STARTUPINFO siStart;
siStart.dwFlags = STARTF_USESTDHANDLES;
siStart.wShowWindow = SW_HIDE
siStart.cb =sizeof(siStart);
 
PROCESS_INFORMATION piInfo;
memset(&siStart,0,sizeof(siStart)); // <- TU VIENS D'EFFACER TOUT CE QU'IL Y AVAIT DANS siStart
memset(&piInfo,0,sizeof(piInfo));

C++ (@++)<!--
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
14
STARTUPINFO siStart;
siStart.dwFlags = STARTF_USESTDHANDLES;
siStart.wShowWindow = SW_HIDE
siStart.cb =sizeof(siStart);
 
PROCESS_INFORMATION piInfo;
memset(&siStart,0,sizeof(siStart)); // <- TU VIENS D'EFFACER TOUT CE QU'IL Y AVAIT DANS siStart
memset(&piInfo,0,sizeof(piInfo));

C++ (@++)<!--
Messages postés
4
Date d'inscription
mardi 7 janvier 2003
Statut
Membre
Dernière intervention
4 février 2008

 Oups quel nouille!! j'avais pas fait gaffe ... Comme j'ai pas mal bidouiller cette partie j'ai du faire un copier/coller de trop !
Bref comme quoi c'est bien d'avoir un regard extérieur !! Merci SaKingdom !! Je pige mieux pourquoi le SW_HIDE marche pas du coup !!! MDR.

Par contre pour le reste i.e intercepter l'apparition du messagebox indiquant la fin du programme de calcul pour tuer le processus je sais pas trop comment faire.

Vos suggestions sont donc les biens venues.
-FKING-