Ich hätte da ein paar Fragen bzw. Anmerkungen zu deinem Code
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 // <--- Hier (1)
begin
if pos(Exename, pe32.szExeFile) <> 0 then // <--- Hier (2)
result := pe32.th32ProcessID;
end;
end;
CloseHandle(hProcSnap);
end;
end;
...
zu (1): überspringst du bei der While-Schleife nicht den ersten Eintrag der mit Process32First gefunden wurde? Beim Aufruf von Process32Next, müsste doch der Wert den dir Process32First geliefert hat gleich wieder verloren gehen, oder?
Ok, ich hab die Hilfe für die 2 Funktionen noch nicht gelesen, aber sieht verdächtig aus.
zu (2): wäre es nicht sicherer die Strings in pos vorher in Upper/LowerCase umzuwandeln? weil so ist es ein Unterschied ob du nach 'notepad.exe' oder 'NoTePaD.eXe' suchst, oder?
Ich habe deinen Source nicht ausprobiert, falls alles so funktioniert ... sorry für die Anmerkungen, und Schande über mich.