Hi,
ich starte aus einer Apllikation heraus ein weiteres Programm. Ich muss sobald die Applikation den Fokus erhält (geht nicht anders) überprüfen, ob das gestartete Programm noch aktiv ist.
Eigentlich kein Problem: zum Starten des Programmes benutze ich CreateProcess und merke mir die ProcessId. Erhält die Applikation den Fokus, überprüfe ich mit OpenProcess gefolgt von GetExitCodeProcess, ob das Programm noch aktiv ist.
Das funktioniert auch alles. Jetzt will ich aber auch beim Neustart von Windows bzw. meiner Applikation überprüfen, ob ein vorher gestartetes Programm noch aktiv ist, oder ob es in der Zwischenzeit beendet wurde. Leider kommt es vor, dass die, für das am Anfang von meiner Applikation gestartete Programm, vergebene ProcessId an einen anderen Task vergeben wurde. Somit "merkt" meine Apllikation nicht, das das Programm bereits beendet wurde.
Frage: wie kann ich zusätzlich das von meiner Applikation gestartete Programm identifizieren? Ich habe ProcessVersion versucht, aber die scheint immer gleich zu sein.
Hat jemand eine Idee? Kennt z.B. jemand ein Möglichkeit, den Programmnamen oder den Pfad zum Executable anhand der ProcessId zu ermitteln?
Ciao
Compiguru
Für alle, die Code brauchen:
bool ProcessInMem(long ProcessId, long DbProcessVersion)
{
unsigned long ExitCode;
HANDLE hProcess = NULL;
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, ProcessId);
if(hProcess != NULL)
{
GetExitCodeProcess(hProcess, &ExitCode);
CloseHandle(hProcess);
if(ExitCode == STILL_ACTIVE)
{
DWORD ProcessVersion = GetProcessVersion(ProcessId);
if(DbProcessVersion == ProcessVersion)
return true;
}
}
return false;
}
ich starte aus einer Apllikation heraus ein weiteres Programm. Ich muss sobald die Applikation den Fokus erhält (geht nicht anders) überprüfen, ob das gestartete Programm noch aktiv ist.
Eigentlich kein Problem: zum Starten des Programmes benutze ich CreateProcess und merke mir die ProcessId. Erhält die Applikation den Fokus, überprüfe ich mit OpenProcess gefolgt von GetExitCodeProcess, ob das Programm noch aktiv ist.
Das funktioniert auch alles. Jetzt will ich aber auch beim Neustart von Windows bzw. meiner Applikation überprüfen, ob ein vorher gestartetes Programm noch aktiv ist, oder ob es in der Zwischenzeit beendet wurde. Leider kommt es vor, dass die, für das am Anfang von meiner Applikation gestartete Programm, vergebene ProcessId an einen anderen Task vergeben wurde. Somit "merkt" meine Apllikation nicht, das das Programm bereits beendet wurde.
Frage: wie kann ich zusätzlich das von meiner Applikation gestartete Programm identifizieren? Ich habe ProcessVersion versucht, aber die scheint immer gleich zu sein.
Hat jemand eine Idee? Kennt z.B. jemand ein Möglichkeit, den Programmnamen oder den Pfad zum Executable anhand der ProcessId zu ermitteln?
Ciao
Compiguru
Für alle, die Code brauchen:
bool ProcessInMem(long ProcessId, long DbProcessVersion)
{
unsigned long ExitCode;
HANDLE hProcess = NULL;
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, ProcessId);
if(hProcess != NULL)
{
GetExitCodeProcess(hProcess, &ExitCode);
CloseHandle(hProcess);
if(ExitCode == STILL_ACTIVE)
{
DWORD ProcessVersion = GetProcessVersion(ProcessId);
if(DbProcessVersion == ProcessVersion)
return true;
}
}
return false;
}
Comment