Private Sub KillProcess()
Dim con() As Process = Process.GetProcesses()
For i As Integer = 0 To con.Length - 1
If con(i).ProcessName = "xyz" Then
Try
con(i).Kill()
Catch ex As Exception
End Try
End If
Next
End Sub
Scheint in Lazarus nicht so einfach zu gehen. Wie mach ich das am Besten? Mit dieser hier,
var h:tHandle;
pe:tProcessEntry32;
sPrcName:string;
aProcess:tAsyncProcess;
begin
h:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
try
pe.dwSize:=SizeOf(pe);
AProcess:=TAsyncProcess.Create(nil);
if Process32First(h,pe) then begin
while Process32Next(h,pe) do
begin
sPrcName:=pe.szExeFile;
if pos('xyz',LowerCase(sPrcName))>0 then
begin
{Wie geht es hier weiter ?}
{... ... ...}
end;
end;
end
else RaiseLastOSError;
finally
FreeAndNil(AProcess);
end;
end;
var h:tHandle;
pe:tProcessEntry32;
sPrcName:string;
// aProcess:tAsyncProcess;
begin
h:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
try
pe.dwSize:=SizeOf(pe);
// AProcess:=TAsyncProcess.Create(nil);
if Process32First(h,pe) then begin
while Process32Next(h,pe) do
begin
sPrcName:=pe.szExeFile;
if pos('xyz',LowerCase(sPrcName))>0 then
begin
TerminateProcess(OpenProcess(Process_Terminate, False, pe.th32ProcessID), 0);
end;
end;
end
else RaiseLastOSError;
finally
// FreeAndNil(AProcess);
end;
end;
exc-jdbi hat geschrieben:
Ich hab leider kein Linux zu Hand. Darf ich annehmen, dass diese Funktion so wie beschrieben nicht nur für Windows korrekt lauft?
Davon würde ich nicht ausgehen.
Allgemein würde mich interessieren, warum ein normales Programm einen andern Prozess abschießen soll?
Ich arbeite hier mit Windows. Und darum ist es für mich noch kein Problem.
Ich kann diese Routine gut gebrauchen, da bei mir unter bestimmten Umständen leider (eben Windows) gewisse Prozesse mehrere Male aufgestartet werden. Vorallem wen ich mit MS Office arbeite.