【Delphi】请问如何根据句柄结束进程

来源:百度知道 编辑:UC知道 时间:2024/05/16 11:52:15
function TForm1.KillTask(ExeFileName: string): integer;
const
PROCESS_TERMINATE = $0001;
var
ContinueLoop: BOOLean;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
Result := 0;
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(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
UpperCase(ExeFileName))) then
Result := Integer(TerminateProcess(OpenProcess(PROCESS_TERMINATE,BOOL(0),FProcessEntry32.th32ProcessID),0));
ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);
end;
CloseHandle(FSnapshotHandle);

end;

//这是一段结束进程的函数,比如我要结束IEXPLORE.EXE 那么直接K

找到你要关闭的窗口,这个你已经会了,然后再用GetWindowThreadProcessId这个函数找到跟这个窗口关联的进程,然后把这个进程ID传给你那个KillTask过程,不过你这个过程需要改一下,把参数改成传递ID的就可以了。

把这段判断进程名称的
f ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) =
UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) =
UpperCase(ExeFileName))) then
改成判断进程ID的就可以了。
if FProcessEntry32.th32ProcessID = id then

ie的话,你可以找到句柄,用findwindows,操作获得的句柄就好了