获取进程列表和结束进程
uses TLHelp32, Classes;
type
TProcessInfo = record
ExeFile: string;
ProcessID:
DWORD;
end;
pProcessInfo = ^TProcessInfo;
var
AProcessList: Tlist;
////返回进程在这个TList中
//获取进程列表
procedure GetProcessList;
var
p: pProcessInfo;
i:
integer;
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32:
TProcessEntry32;
begin
if not Assigned(AProcessList) then
AProcessList := TList.Create;
AProcessList.Clear;
FSnapshotHandle :=
CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize :=
Sizeof(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle,
FProcessEntry32);
while integer(ContinueLoop) <> 0 do
begin
New(p);
p.ExeFile := FProcessEntry32.szExeFile;
p.ProcessID :=
FProcessEntry32.th32ProcessID;
AProcessList.Add(p);
ContinueLoop
:= Process32Next(FSnapshotHandle, FProcessEntry32);
end;
end;
//结束进程
procedure EndProcess(AFileName:
string);
const
PROCESS_TERMINATE = $0001;
var
ContinueLoop:
BOOL;
FSnapShotHandle: THandle;
FProcessEntry32:
TProcessEntry32;
begin
FSnapShotHandle :=
CreateToolhelp32SnapShot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize :=
SizeOf(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle,
FProcessEntry32);
while integer(ContinueLoop) <> 0 do
begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
UpperCase(AFileName))
or (UpperCase(FProcessEntry32.szExeFile)
=
UpperCase(AFileName))) then
TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0),
FProcessEntry32.th32ProcessID), 0);
ContinueLoop :=
Process32Next(FSnapshotHandle, FProcessEntry32);
end;
end;
注:请自己添加释放AProcessList的代码。