[C++6.0/Win] prüfen ob prozess läuft

Hallo!
Ich habe ein Problem: Ich will prüfen ob ein bestimmter Prozess läuft. Dieser sollte sich von selbst beenden. Nachdem das geschehen ist soll mein Programm weiter arbeiten. Nur googel ich schon über 1 Stunde und alle Methoden die ich gefunden habe, funktionieren nicht...
Mir gefällt der Ansatz mit FindWindow am besten, weil er nicht besonders kompliziert ist.
Ich hab' hier sleep eingebaut. Das macht das Programm vieleicht etwas träge, aber das macht eigentlich nichts.
Code:
...
WinExec (programm.c_str(), SW_SHOW);
Sleep(5000);
while (FindWindow (NULL,"DasProgramm.exe"){Sleep(2000);}
...
Aber trotzdem macht mein Programm nach den gegebenen 5 Sekunden einfach weiter. Bin da solangsam mit meinem Latein am Ende. :.(
Danke im Vorraus für Hilfe :)
 
ich würde das mit der WinApi lösen...
Code:
CreateProcess(...)
Schau in der MSDN nach oder google danach. Die Funktion liefert dir eine ProcessID zurück. Dann kannst du mit
Code:
OpenProcess(...)
prüfen, ob ein gültiges Handle auf den Process zurückgegeben wird.
Schau einfach nach den beiden Fkt in der MSDN nach. Ansonsten frag nochmal, dann kann ich dir morgen nochmal eine genauere Beschreibung geben...
 
oh man, nach einer weiteren Stunde hab ich's damit hinbekommen. Bin aber kein MSDN Fan... Mit den Erklärungen dadrin komm ich irgendwie nicht klar. O.o
Naja, letztendlich lags daran, dass fast alle nicht alle für den Aufruf nötigen befehle posten. Vor Allem die Variablendefinitionen fehlen immer xD

So siehts jetzt bei mir aus und funktioniert wunderbar:
Code:
PROCESS_INFORMATION pi;
STARTUPINFO siStartupInfo;
memset(&siStartupInfo, 0, sizeof(siStartupInfo));
memset(&pi, 0, sizeof(pi));
siStartupInfo.cb = sizeof(siStartupInfo);
char *ch = new char[buff.size()+1];
strcpy(ch, buff.c_str()); 
		
CreateProcess( NULL, // No module name (use command line). 
			ch,					// Command line. 
			NULL,             // Process handle not inheritable. 
			NULL,             // Thread handle not inheritable. 
			TRUE,            // Set handle inheritance to FALSE. 
			0,                // No creation flags. 
			NULL,             // Use parent's environment block. 
			NULL,             // Use parent's starting directory. 
			&siStartupInfo,              // Pointer to STARTUPINFO structure.
			&pi );             // Pointer to PROCESS_INFORMATION structure.
delete [] ch;

GetExitCodeProcess(pi.hProcess, &dwExitCode);
while (dwExitCode == STILL_ACTIVE)
{
	GetExitCodeProcess(pi.hProcess, &dwExitCode);
	Sleep(1000);
}
 
Zurück
Oben