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 :
<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);
}
</code>
Merci d'avance pour vos réponses,
-= FKING =-