So liste ich mir die ganzen Prozesse (also die *.exe namen) in einer ListBox auf:
Delphi-Quellcode:
procedure TForm1.getAllProcesses;
var
hSnap: THandle;
ProcEntry: TProcessEntry32;
s: String;
begin
hSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnap <> INVALID_HANDLE_VALUE) then
begin
ProcEntry.dwSize := SizeOf(ProcessEntry32);
if (Process32First(hSnap, ProcEntry)) then
begin
s := ProcEntry.szExeFile;
lb_Processes.Items.Clear;
lb_Processes.Items.add(ExtractFileName(s));
while Process32Next(hSnap, ProcEntry) do
begin
s := ProcEntry.szExeFile;
lb_Processes.Items.add(ExtractFileName(s));
end;
end;
end;
CloseHandle(hSnap);
end;
Und bei auswahl eines Prozesses hohl ich mir dann vorerst so die Prozess-ID, um damit dann den Prozess zu killn:
Delphi-Quellcode:
function TForm1.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
begin
if pos(Exename, pe32.szExeFile) <> 0 then
result := pe32.th32ProcessID;
end;
end;
CloseHandle(hProcSnap);
end;
end;
Ich weiß, ist nicht die sauberste Lösung, aber für mich reicht es und das wichtigste: bisher funktionierts.