![]() |
Prüfen mittels PID ob Prozess läuft
Hallo,
das ganze treibt mich in den Wahnsinn. Ich hab schon einige Beiträge hier durch aber bei mir geht es nicht. Benötigt: Ich habe eine PID als Integerwert nun möchte ich gerne prüfen, ob der Prozess dazu läuft und hätte gerne ein Ja oder Nein zurück. Problem: Ich habe einige Sachen ausprobiert wie Beitrag ![]() [DELPHI]hProcess := GetProcessHandleFromID(GetProcessID('notepad.exe') );DELPHI] angeb geht alles gut und er sagt das das Programm läuft. Nur wenn ich die PID direkt übergebe bekomm ich immer ein OK egal ob der Prozess läuft oder nicht obwohl es auch so wie im Beitrags Script ausgeführt wird.
Delphi-Quellcode:
...
var myHandle: THandle; begin myHandle := OpenProcess(SYNCHRONIZE, False, myID); if myHandle <> 0 then Label1.Caption := 'ok' else Label1.Caption := 'no'; ... Die PID stimmt definitiv und wäre auch die gleiche die im oberen Script (Link) gesagt wird. Kann mir da jemand helfen? Wie gesagt ich will nur eine PID Abfragen und den Status bekommen mehr nicht. |
AW: Prüfen mittels PID ob Prozess läuft
Und wo bekommst du die PID nachher her? Und was sagt GetLastError im Fehlerfall?
|
AW: Prüfen mittels PID ob Prozess läuft
Du überprüfst nicht, ob ein Prozess mit der PID läuft, sondern prüfst ob diese Null ist. Wenn du sie auf einen bestimmten Wert setzt, ist sie das natürlich nie.
Außerdem sind ein Handle und eine PID auch unterschiedliche Sachen. In dem verlinktem Beitrag ist folgender Teil interessant:
Delphi-Quellcode:
PS: @Luckie:
function GetProcessID(Exename: string): DWORD;
var hProcSnap: THandle; pe32: TProcessEntry32; begin result := 0; hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0); if hProcSnap <> INVALID_HANDLE_VALUE then begin pe32.dwSize := SizeOf(ProcessEntry32); if Process32First(hProcSnap, pe32) = true then begin while Process32Next(hProcSnap, pe32) = true do // gehe durch alle Prozesse begin if pos(Exename, pe32.szExeFile) <> 0 then result := pe32.th32ProcessID; // die Prozess ID wird zurückgegeben end; end; CloseHandle(hProcSnap); end; end; Wäre es so rum nicht richtiger:
Delphi-Quellcode:
if Process32First(hProcSnap, pe32) then
begin repeat // gehe durch alle Prozesse if pos(Exename, pe32.szExeFile) <> 0 then result := pe32.th32ProcessID; // die Prozess ID wird zurückgegeben until Process32Next(hProcSnap, pe32); end; |
AW: Prüfen mittels PID ob Prozess läuft
Wobei das so eigentlich kaum einen Sinn macht. Die Process ID ist Schall und Rauch, da diese nach der Beendigung eines Prozesses auch wieder vergeben wird. Ob also der Prozess noch läuft, zu dem die ID ursprünglich gehörte, oder ein neuer mit dieser ID, lässt sich aus der ID nicht feststellen.
Man kann vielleicht zusätzlich vergleichen wann der Prozess gestartet wurde um eine bestimmte Instanz zu prüfen. |
AW: Prüfen mittels PID ob Prozess läuft
Hm, nehmen wir mal an, es macht einen Sinn - ich konnte das gewünschte hier nachbauen und es läuft ohne Probleme:
Delphi-Quellcode:
Hier liegt nur ein Edit auf dem Formular, in dem man eine ID manuell eingeben kann (die man vorher über einen anderen Button sich anzeigen lassen kann). Ein Klick auf Button2 löst obige Prozedur aus. Ich habe das dann mit dem Notepad++ getestet und seine aktuelle Prozess-ID angegeben. Das Programm hat mir gesagt, dass er läuft. Dann habe ich den Notepad++ beendet und bekam die Meldung, dass er nicht mehr läuft. Alles gut also.
procedure TForm2.Button2Click(Sender: TObject);
var myID: integer; hProcess: THandle; begin myID:=strToInt(edit1.Text); hProcess := GetProcessHandleFromID(myID); if hProcess = 0 then Label1.Caption := 'Programm läuft nicht' else Label1.Caption := 'Programm läuft'; end; Will sagen: wenn du die Funktionen von Luckie so aufrufst, funktioniert das wie von dir gewünscht gewünscht. Das Problem müsste in der Tat irgendwo anders liegen. Vielleicht steht in deiner Variable zum Zeitpunkt des Aufrufs der falsche Wert, denn was vorher mit der passiert, wissen wir ja nicht. :) Bis denn Bommel |
AW: Prüfen mittels PID ob Prozess läuft
Zitat:
|
AW: Prüfen mittels PID ob Prozess läuft
Zitat:
|
AW: Prüfen mittels PID ob Prozess läuft
Okay hab nun noch mal alles neu eingefügt und siehe da es geht. Danke nochmal.
|
AW: Prüfen mittels PID ob Prozess läuft
Ich prüfe auf diesem Weg, ob die bds.exe (also Delphi) läuft.
Das funktioniert auch. Aber kann ich noch den Pfad der Exe ermitteln, um auf eine bestimmte Version zu prüfen? Im Taskmanager kann man über Rechtsklick auch "Dateipfad öffnen" auswählen. Kommt man an die Info heran? |
AW: Prüfen mittels PID ob Prozess läuft
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz