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

php中文网
发布: 2016-06-07 15:30:48
原创
2183人浏览过

下面是具体代码 总共分为两个过程 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,转发请保留这个地址,谢谢

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号