最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

通过进程句柄关闭某个程序的进程

来源:懂视网 责编:小采 时间:2020-11-09 07:31:09
文档

通过进程句柄关闭某个程序的进程

通过进程句柄关闭某个程序的进程:下面是具体代码 总共分为两个过程 EnumProcTree 主要用来枚举句柄树 KillProc 关闭 某个 程序 的 进程 procedure EnumProcTree(const PID: DWORD; out PID_Tree: TPIDTree); procedure ListTree(RootPID: DWORD)
推荐度:
导读通过进程句柄关闭某个程序的进程:下面是具体代码 总共分为两个过程 EnumProcTree 主要用来枚举句柄树 KillProc 关闭 某个 程序 的 进程 procedure EnumProcTree(const PID: DWORD; out PID_Tree: TPIDTree); procedure ListTree(RootPID: DWORD)

下面是具体代码 总共分为两个过程 EnumProcTree 主要用来枚举句柄树 KillProc 关闭 某个 程序 的 进程 procedure EnumProcTree(const PID: DWORD; out PID_Tree: TPIDTree); procedure ListTree(RootPID: DWORD); var hP_Root: THandle; Found: Boolean; Pn:

下面是具体代码
总共分为两个过程
EnumProcTree 主要用来枚举句柄树
KillProc 关闭某个程序的进程


procedure EnumProcTree(const PID: DWORD;
out PID_Tree: TPIDTree);

procedure ListTree(RootPID: DWORD);
var
hP_Root: THandle;
Found: Boolean;
Pn: TProcesseNtry32;
hSnap: THandle;
begin
hP_Root := OpenProcess(PROCESS_ALL_ACCESS, False, RootPID);
if hP_Root <> 0 then
begin
CloseHandle(hP_Root);

SetLength(PID_Tree, Length(PID_Tree) + 1);
PID_Tree[Length(PID_Tree) - 1] := RootPID;

hSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
Pn.dwSize := SizeOf(TProcesseNtry32);
Found := Process32First(hSnap, Pn);
while Found do
begin
if RootPID = Pn.th32ParentProcessID then
begin
ListTree(Pn.th32ProcessID);
end;
Found := Process32Next(hSnap, Pn);
end;
CloseHandle(hSnap);
end;
end;
begin
SetLength(PID_Tree, 0);
ListTree(PID);
end;

KillProc过程的参数:
PID需要结束的句柄ID
Killchild是否结束子进程

如果KillChild是True,那么首先枚举所有的子句柄,然后一次性都关闭
procedure KillProc(PID: DWORD; Killchild: Boolean = True; const ExitCode: Cardinal = 0);
var
i: integer;
hProc: THandle;
PID_Tree: TPIDTree;
begin
if Killchild then
begin
EnumProcTree(PID, PID_Tree);

for i := High(PID_Tree) downto Low(PID_Tree) do
begin
if (PID_Tree[i] <> 0) then
begin
hProc := OpenProcess(PROCESS_ALL_ACCESS, False, PID_Tree[i]);
if hProc <> 0 then
begin
TerminateProcess(hProc, ExitCode);
CloseHandle(hProc);
end;
end;
end;
end
else
begin
hProc := OpenProcess(PROCESS_ALL_ACCESS, False, PID);
if hProc <> 0 then
begin
TerminateProcess(hProc, ExitCode);
CloseHandle(hProc);
end;
end;
end;

使用代码
KillProc(lpProcessInformation.dwProcessId, True, Result);

lpProcessInformation.dwProcessId 进程的句柄ID
True结束子进程
本文地址:http://www.xszlo.com/article/2012-12-24/7746.html,转发请保留这个地址,谢谢

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

通过进程句柄关闭某个程序的进程

通过进程句柄关闭某个程序的进程:下面是具体代码 总共分为两个过程 EnumProcTree 主要用来枚举句柄树 KillProc 关闭 某个 程序 的 进程 procedure EnumProcTree(const PID: DWORD; out PID_Tree: TPIDTree); procedure ListTree(RootPID: DWORD)
推荐度:
标签: 关闭 一个 下面
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top