`
sbabzc
  • 浏览: 38668 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多
下面是具体代码
总共分为两个过程
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,转发请保留这个地址,谢谢
分享到:
评论

相关推荐

    易语言进程名取进程句柄

    而“进程句柄”则是一种用于操作系统内部管理的标识符,通过句柄,程序可以对进程进行操作,如读写、控制等。 "GetWindowThreadProcessId"是Windows API中一个重要的函数,它的作用是从窗口的句柄中获取与该窗口...

    监听进程是否已退出

    ' 关闭进程句柄 CloseHandle hProcess Else MsgBox "创建进程失败" End If ``` 以上代码展示了如何在VB中启动一个进程并监听其退出。`GetExitCodeProcess`函数用于获取进程的退出代码,这个代码通常反映了进程的...

    LJC.rar_句柄_进程句柄

    在编程实践中,了解和使用进程句柄可以提高程序的效率和安全性。比如,当我们需要关闭一个文件或结束一个进程时,直接使用句柄会比通过其他间接方法更有效率,因为操作系统内部查找和验证句柄的过程更快。此外,句柄...

    简易任务管理器(附带源码)可枚举、关闭进程、句柄、线程等

    在某些情况下,我们可能需要强制结束某个无响应或者占用过多资源的进程,这就是“关闭进程”的作用。简易任务管理器允许用户选择并终止特定的进程,从而释放系统资源,确保系统的正常运行。 然后,我们讨论“句柄”...

    MFC 强制关闭指定进程 强制关闭指定窗口

    窗口则是用户界面中的可视元素,通常与某个进程关联。在MFC中,我们可以使用Windows API函数来操作这些进程和窗口。 1. **查找进程**: 要找到并关闭特定进程,我们需要知道进程的名称。可以使用`EnumProcesses`...

    关闭进程打开的句柄

    "关闭进程打开的句柄"这一主题主要关注如何获取并关闭其他程序创建的句柄,以实现更精细的系统管理。 首先,我们需要理解什么是进程。进程是执行中的程序实例,每个进程都有自己的内存空间和系统资源。句柄则提供了...

    进程线程 句柄

    假设我们需要编写一个程序,该程序创建一个子进程并在其中运行一个线程来完成某个任务。首先,我们使用`CreateProcess`函数来创建一个新进程,并传递给子进程一个句柄,该句柄指向一个共享资源(如文件)。接着,在...

    强制结束进程和关闭程序窗口 C#

    在编程领域,尤其是在Windows操作系统上开发应用程序时,有时我们需要对系统中的进程进行管理,比如强制结束某个进程或者关闭特定的程序窗口。本文将详细讲解如何使用C#语言来实现这一功能,结合“强制结束进程”和...

    delphi关闭外部程序aa

    1. **获取进程信息**:要关闭某个外部程序,我们首先要找到它的进程ID。这可以通过`EnumProcesses` API函数实现,它能列出系统中所有运行的进程ID。你需要提供一个缓冲区来存储这些ID,并调用`EnumProcesses`来填充...

    Delphi如何关闭一个进程

    接着,我们调用`EndProcess`来结束进程,并确保最后关闭进程句柄。 需要注意的是,关闭进程需要相应的权限,如果没有足够的权限(例如,尝试关闭系统进程),则会导致操作失败。此外,直接结束进程可能会影响到其他...

    【PB代码】获取和结束进程

    一旦获得了进程句柄,可以使用`TerminateProcess`函数来结束指定的进程。需要注意的是,这个操作是立即的且不可逆,因此在执行前应谨慎。 3. **处理多用户情况**: 描述中提到,这个例子没有处理多用户同时登录的...

    删除程序的 mutex 互斥句柄

    创建互斥体后,线程可以通过调用`CreateMutex()`函数获取一个互斥句柄。这个句柄用于后续的`WaitForSingleObject()`或`WaitForMultipleObjects()`等函数,这些函数会让调用线程进入等待状态,直到互斥体被释放。当一...

    VB查看进程是否运行

    在VB(Visual Basic)编程中,查看进程是否运行是一项常见的任务,这有助于程序根据系统当前的运行状态执行相应的操作。本篇文章将详细讲解如何利用VB实现这一功能,并提供相关代码示例。 首先,我们需要理解什么是...

    VB进程保护、隐藏[含源码]

    例如,`OpenProcess`用于获取进程句柄,`GetModuleHandle`用于获取模块句柄,`CloseHandle`用于关闭已打开的句柄。在VB中,调用API需要使用 Declare 语句声明函数原型,并传递适当的参数。 四、风险与安全 虽然进程...

    易语言利用互斥体禁止程序重复运行

    本资源主要关注的是如何利用易语言中的互斥体(Mutex)机制来防止程序重复运行,这是一个常见的多进程同步问题。互斥体在多线程和多进程编程中扮演着关键角色,确保同一时间只有一个实例可以访问共享资源,从而避免...

    易语言断开进程网络连接源码

    最后,完成操作后记得释放资源,关闭进程句柄: ```易语言 API "kernel32.dll", "CloseHandle", .取整数, 进程句柄 ``` 这个过程涉及到的知识点包括易语言的基础语法、API函数的调用、Windows API的理解和应用、...

    易语言简单代码禁止运行某程序

    禁止运行某程序的主要思路是通过系统API(应用程序接口)来实现。在易语言中,我们可以调用Windows API函数来达到这一目的。Windows API提供了丰富的功能,其中`CreateToolhelp32Snapshot`和`Process32First/Next`...

    进程管理工具 可用来分析事件对象句柄

    2. **跟踪句柄变化**:记录句柄的创建、关闭和状态改变,以便分析其在整个程序执行过程中的行为。 3. **检测资源争用**:找出可能导致阻塞或延迟的事件对象句柄,分析其背后的原因。 4. **调试问题**:当出现错误或...

    易语言源码杀进程模块.7z

    杀进程模块是系统管理中常见的功能,主要用于结束运行中的某个程序。在Windows操作系统中,进程是执行中的应用程序实例,每个进程都有一个独立的内存空间。杀进程通常涉及到以下几个步骤: 1. **获取进程信息**:...

    易语言系统进程管理模块

    在某些情况下,比如需要强制关闭某个不响应的程序或执行清理操作时,这一功能尤其重要。需要注意的是,结束进程应当谨慎操作,因为它可能会影响到其他依赖于该进程的程序。 在实际开发中,易语言系统进程管理模块...

Global site tag (gtag.js) - Google Analytics