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:
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;
PS: @Luckie:
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;