Prüfen ob Ein Prozess läuft

LordofFrog

Enthusiast
Thread Starter
Mitglied seit
03.11.2007
Beiträge
415
Abend,

ich hab mich heute schon wundgesucht, aber keine Lösung für mein Problem gefunden.

ich starte ein program über ShellExecute(),
nun möchte ich in einer whileschleife prüfen ob der prozess aktiv ist.

über findwindow() habe ich über den namen schon mal den handle to the window gefunden. nun hab ich darüber die prozess ID ausgelesen und hab auch einen wert DWORD = 2145 z.b.

problem ist, wenn ich in der whileschleife nur abfrage ob das fenster noch da ist kann es passieren, dass wenn es auf die taskleiste minimiert wird das programm die whileschleife verlässt und weiter macht, was aber nicht richtig ist.

erst wenn der prozess beendet wurde soll es weiter machen.

wie kann ich das machen?

LoF
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Ausgrab.


geht immernoch um das gleiche programm.

ShellExecuteA(0, "open", exepath, 0, 0, SW_SHOWNORMAL);

startet das programm. nun kann es aber sein, dass beim starten was schief läuft, z.b. eine DLL niht gefunden wird. OK passende DLL ins verzeichnis kopiert. neues Problem, nun meckert das programm, dass sich in dem ordner zu viele datein befinden.

Lösung: die DLL erst in das verzeichnis kopieren, wenn ie fehlermeldung kommt, das ie DLL fehlt. wie kann ich das automatisch machen lassen.

Shellexecute(........);
Fehlermeldung abfangen;
Datei kopieren:
Fehlermeldung mit "OK" bestätigen;
Programm startet so wie es soll.

so, hab jetzt mal versucht zu gucken, ob ein fehler zurückgeliefert wird, wenn ich das programm laufen lasse. wue man sieht gibt es einen fehler, aber HINSTANCE EVE_Online gibt einen wert größer 32 zurück, also keinen fehler.

*ratlos*
 
Zuletzt bearbeitet:
Ich würd mich net so quälen, check doch einfach ob die Datei existiert.


#include <sys/stat.h>

bool FileExists(string strFilename) {
struct stat stFileInfo;
bool blnReturn;
int intStat;

// Attempt to get the file attributes
intStat = stat(strFilename.c_str(),&stFileInfo);
if(intStat == 0) {
// We were able to get the file attributes
// so the file obviously exists.
blnReturn = true;
} else {
// We were not able to get the file attributes.
// This may mean that we don't have permission to
// access the folder which contains this file. If you
// need to do that level of checking, lookup the
// return values of stat which will give you
// more details on why stat failed.
blnReturn = false;
}

return(blnReturn);
}
 
das buch werde ich mir mal anschauen.

at fronzel, das problem dabei ist, dass die datein nicht im ordner sein darf, wenn das programm startet. dein code überprüft dass, gut aber sobald das zweite programm gestartet wird, wird nach dieser datei im windows ordner gesucht. wenn sie nicht da is gibt es eine fehlermeldung und diese muss ich abfangen, sonst geht es nicht weiter.
 
überprüf doch ob die Datei da ist, wenn ja lösche sie damit sie erstmal fehlt.
dann mit try/catch auf den Fehler warten und die datei an die richtige stelle schieben. Dann weiter laufen lassen sprich zurück zu stelle x :)
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh