function MyFun_GetProcessID(ProcessName: string): Cardinal; var FSnapshotHandle: THandle; FProcessEntry32: TProcessEntry32; Ret: Boolean; TmpProcessName: string; TmpProcessID: DWORD; begin TmpProcessID := 0; //如果没有找到 //创建系统快照 FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); //先初始化 FProcessEntry32 的大小 FProcessEntry32.dwSize := SizeOf(FProcessEntry32); Ret := Process32First(FSnapshotHandle, FProcessEntry32); //循环枚举出系统开启的所有进程,找出“ProcessName”所指定的进程 while Ret do begin TmpProcessName := ExtractFileName(FProcessEntry32.szExeFile); if TmpProcessName = ProcessName then begin TmpProcessID := FProcessEntry32.th32ProcessID; Break; end; Ret := Process32Next(FSnapshotHandle, FProcessEntry32); end; CloseHandle(FSnapshotHandle); Result := TmpProcessID; end;
function KillExe(strFileName:string):Boolean; var ProcessID: THandle; FHandle: THandle; begin ProcessID := MyFun_GetProcessID(strFileName); FHandle := OpenProcess(PROCESS_ALL_ACCESS ,False,ProcessID); Result := TerminateProcess(FHandle,0);
var
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
Ret: Boolean;
TmpProcessName: string;
TmpProcessID: DWORD;
begin
TmpProcessID := 0; //如果没有找到
//创建系统快照
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
//先初始化 FProcessEntry32 的大小
FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
Ret := Process32First(FSnapshotHandle, FProcessEntry32);
//循环枚举出系统开启的所有进程,找出“ProcessName”所指定的进程
while Ret do
begin
TmpProcessName := ExtractFileName(FProcessEntry32.szExeFile);
if TmpProcessName = ProcessName then
begin
TmpProcessID := FProcessEntry32.th32ProcessID;
Break;
end;
Ret := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);
Result := TmpProcessID;
end;
function KillExe(strFileName:string):Boolean;
var
ProcessID: THandle;
FHandle: THandle;
begin
ProcessID := MyFun_GetProcessID(strFileName);
FHandle := OpenProcess(PROCESS_ALL_ACCESS ,False,ProcessID);
Result := TerminateProcess(FHandle,0);
end;
通过调用KillExe就能关闭了,传入参数为进程的EXE名字