CreateProcess

Résolu
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 5 déc. 2004 à 14:45
olivierroyo Messages postés 8 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 4 septembre 2009 - 1 juil. 2009 à 16:35
Salut,
J'ai une petite question dont la réponse est sans doute dans la MSDN mais c'est vraiment long a lire alors avant de commencer je tente le coup ici. Est-il possible de récupérer le code de retour d'un module éxécuté avec CreateProcess?
Par exemple
STARTUPINFO si = {sizeof si};
PROCESS_INFORMATION pi = {0};
CreateProcess(0, "regedit", 0, 0, 0, 0, 0, 0, &si, &pi);
WaitForSingleObject(pi.hProcess, INFINITE);
// Combien a renvoyé l'éxécution de regedit?


Merci

8 réponses

cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
5 déc. 2004 à 15:14
The GetExitCodeProcess function retrieves the termination status of the specified process.
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 déc. 2004 à 15:15
GetExitCodeProcess

ciao...
BruNews, MVP VC++
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
5 déc. 2004 à 15:18
Merci, je venais de trouver sur le forum
0
olivierroyo Messages postés 8 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 4 septembre 2009
30 juin 2009 à 09:05
Je remet le sujet au gout du jour,
j'ai noté un probleme avec: GetExitCodeProcess
J'ai un example ou je lance avec CreateProcess une page sur internetExplorer. Lorsqu'un fenetre ie, est deja lancee, le resulat de GetExitCodeProcess est "actif", meme si je ferme ma fenetre generee.
D'ou mes 2 questions:
1- y a t il un moyen de savoir precisement si ma fenetre et mon process est actif ou non.
2- vous auriez un example pour tuer un process avec ExitProcess ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
olivierroyo Messages postés 8 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 4 septembre 2009
30 juin 2009 à 11:41
Ok, je me repond a moi meme, au cas ou ca interesse qqun.

1- curieusement lorsqu'on lance ie avec CreateProcess, il y a deux process de créés (merci la console!!). Ceci expliqueraitz bien cela. Ca marche super avec notePad par exemple.

2- pour fermer un prog exécuté via CreateProcess, il faut utiliser TerminateProcess().

qqun pourrait confirmer?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
30 juin 2009 à 20:44
Si c'est un prog fenêtré, il convient de fermer proprement en envoyant un WM_CLOSE via PostMessage sur la fanêtre principale.

ciao...
BruNews, MVP VC++
0
olivierroyo Messages postés 8 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 4 septembre 2009
1 juil. 2009 à 15:55
Effectivement, mais pas evident de trouver son Hwnd avec le PROCESS_INFORMATION!
je suis passé par:
::EnumWindows(KillWindow, pi.dwProcessId);

et ma methode KillWindow compare les ids de toutes les fenetres ouvertes.
0
olivierroyo Messages postés 8 Date d'inscription mercredi 12 mars 2008 Statut Membre Dernière intervention 4 septembre 2009
1 juil. 2009 à 16:35
pour eviter de passer par un CALLBACK:

HWND h = ::GetTopWindow(0 );
while ( h )
{
DWORD pid;
DWORD dwTheardId = ::GetWindowThreadProcessId( h,&pid);

if ( pid == /*your process id*/ )
{
// here h is the handle to the window
break;
}
h = ::GetNextWindow( h , GW_HWNDNEXT);
}
0
Rejoignez-nous