`
hanbaohong
  • 浏览: 407524 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

用OpenProcess、GetExitCodeProcess和TerminateProcess关闭进程

    博客分类:
  • VB
 
阅读更多

如果需要结束其他进程的执行,可以使用TerminateProcess函数。

BOOL TermintaeProcess(HANDLE hProcess,UINT uExitCode );

hProcess是要结束的目标进程的句柄,uExitCode指定目标进程的退出代码,可以使用GetExitCodeProcess取得一个进程的退出代码。

 

对于一个已经存在的进程,只能使用OpenProcess函数来取得这个进程的访问权限。

HANDLE OpenProcess(DWORD dwDesiredAccess,BOOL bInheritHandle,DWORD dwProcessId );

dwDesiredAccess参数指定了对该进程的访问权限,这些权限可以是:PROCESS_ALL_ACCESS即所有可进行的权限;PROCESS_QUERY_INFORMATION即查看该进程信息的权限;还有很多。bInheritHandle参数指定此函数返回的句柄是否可以被继承。dwProcessId参数指定了要打开进程的ID号,可以从任务管理器中找到它们,也可以使用ToolHelp函数获取。

 

我用VB写的shellCmd类:

Option Explicit

Private Const PROCESS_ALL_ACCESS = &H1F0FFF
Private Const PROCESS_QUERY_INFORMATION = &H400

Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32.dll" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32.dll" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long

Public Function CloseProcess(ByVal dwProcessId As Long) As Boolean
    Dim hProcess As Long
    Dim lpExitCode As Long
    hProcess = OpenProcess(PROCESS_ALL_ACCESS, False, dwProcessId)
    If hProcess = 0 Then
        CloseProcess = False
        Exit Function
    End If
    If GetExitCodeProcess(hProcess, lpExitCode) = 0 Then
        CloseProcess = False
        CloseHandle (hProcess)
        Exit Function
    End If
    If TerminateProcess(hProcess, lpExitCode) = 0 Then
        CloseProcess = False
    Else
        CloseProcess = True
    End If
    CloseHandle (hProcess)
End Function

Public Function IsRunning(ByVal ProgramID) As Boolean
    Dim hProgram As Long
    hProgram = OpenProcess(PROCESS_QUERY_INFORMATION, False, ProgramID)
    If hProgram <> 0 Then
        IsRunning = True
    Else
        IsRunning = False
    End If
    CloseHandle hProgram
End Function

 

我用VB写的调用这个类的函数:

'shellCmd在ASP中调用CMD.EXE执行DOS下的EXE程序
'cmdStr为由CMD.exe及DOS下的EXE文件名路径名组成的字符串
'返回值为执行EXE所用的秒数
Public Function myShell(cmdStr) As Single
    Dim start, b, PID, ret, useTime, hProcess
    Set myshellclass = New shellCmd
    startTime = GetTickCount()
    useTime = 0
    PID = Shell(cmdStr, vbHide)     'vbNormalFocus显示窗口
    Do While myshellclass.IsRunning(PID) And useTime < 3000
        useTime = GetTickCount() - startTime
        DoEvents
    Loop
    Call myshellclass.CloseProcess(PID) '若该进程在运行则关闭它
    myShell = GetTickCount() - startTime
End Function

 

分享到:
评论

相关推荐

    显示和杀死系统当前进程.rar_OpenProcess_TerminateProcess

    此代码示范了如何利用 CreateToolhelp32Snapshot API函数枚举系统当前进程。以及如何用HANDLE OpenProcess(...),TerminateProcess(...)来打开和关闭活动进程。

    hook openprocess进程免杀

    "Hook"是编程中的一种技术,它允许程序员拦截和修改特定函数的调用行为,而"OpenProcess"是Windows API中的一个函数,用于获取对目标进程的访问权限。当结合“免杀”(即防止被安全软件检测和阻止)的概念时,这通常...

    利用hook OpenProcess实现进程防杀的DLL源码

    分析和理解这些源码有助于深入学习hook技术和进程防杀机制。源码的阅读和调试可以帮助你更好地掌握Windows API的使用,以及如何利用它们来增强系统的安全性。 总之,hook `OpenProcess`是实现进程防杀的一种有效...

    进程防杀 Hook OpenProcess

    进程防杀技术是一种在计算机安全领域中用于保护恶意软件或合法程序免受反病毒软件和其他安全工具检测和清除的方法。Hook OpenProcess是其中一种常用的技术手段,它涉及到系统调用拦截和过程注入。 OpenProcess是...

    精选_使用TerminateProcess函数实现结束指定进程_源码打包

    - 谨慎使用:`TerminateProcess`应该谨慎使用,因为它不遵循正常的进程关闭流程,可能导致未保存的数据丢失,未关闭的文件句柄或网络连接泄露等问题。 - 权限检查:确保你有足够的权限终止目标进程。通常,只有管理...

    进程防杀hook openprocess[C]

    在IT领域,尤其是在系统安全和恶意软件分析中,"进程防杀"是一个关键的话题,而"hook openprocess"则是这个话题中的一个重要技术手段。这里我们将深入探讨这两个概念以及它们之间的关联。 首先,让我们理解什么是...

    进程操作 关闭进程 进程ID

    本文将深入探讨如何在VC++(Visual C++)环境下进行进程操作,包括进程枚举、关闭进程以及查询和使用进程ID。 首先,我们要理解什么是进程枚举。在Windows操作系统中,进程枚举是指获取系统中所有正在运行的进程...

    VC_查找进程,关闭进程(包括系统进程system)

    2. **打开进程**: 对于每个进程ID,使用`OpenProcess` API尝试打开进程,并请求必要的权限以读取进程信息。 3. **获取模块文件名**: 使用`GetModuleFileNameEx` API获取进程的主执行文件路径。 4. **比较进程名**: ...

    VC使用TerminateProcess结束进程实例

    `TerminateProcess`函数是Windows API提供的一种方法,用于立即结束指定进程的所有线程和资源。本文将深入探讨如何在VC++环境中使用`TerminateProcess`来结束进程,并通过实例代码进行说明。 首先,`...

    hook 任务管理器 进程防杀

    在IT领域,尤其是系统安全和恶意软件防护方面,“hook 任务管理器 进程防杀”是一个关键的技术点。这个标题暗示了一种技术手段,即通过hook(钩子)技术来防止目标进程被任务管理器或其他类似工具结束,从而增强程序...

    DELPHI强制关闭进程

    综上所述,使用Delphi实现强制关闭进程的功能,主要涉及到Windows API的调用,包括获取进程ID、打开进程句柄和终止进程等步骤。在实际编程时,需要充分理解这些API的使用方法,并考虑相应的错误处理和安全性问题。

    VB杀死指定进程,强制关闭程序_vb进程管理_

    标题提到的"VB杀死指定进程,强制关闭程序"是指使用VB代码调用API(应用程序接口)函数来实现对特定进程的监视、查找和终止操作。API函数是操作系统提供的一系列函数,允许程序员执行系统级别的任务,如管理进程、...

    ApiHook.rar_APIHOOK_OpenProcess_delphi Openprocess_delphi 拦截api_

    总之,"ApiHook.rar_APIHOOK_OpenProcess_delphi"提供的资源可能包含了一个使用Delphi编写的示例,演示了如何拦截`OpenProcess`和`TerminateProcess`,以达到保护进程的目的。这个例子对于学习API Hook技术,以及...

    TerminateProcess

    2. **选择进程**:用户在列表中选择一个进程后,程序需要获取选中进程的详细信息,如进程名称,可以使用`OpenProcess`函数打开进程句柄,然后通过`QueryFullProcessImageName`获取完整进程名。 3. **终止进程**:...

    vc++如何实现关闭进程简介

    本篇文章将详细介绍如何使用VC++来实现关闭进程的功能,并探讨这一技术背后的原理。 首先,我们需要理解进程在操作系统中的概念。进程是执行中的程序实例,每个进程都有自己的内存空间和系统资源。在Windows系统中...

    关闭指定进程VB6源代码

    按指定的名称关闭相应进程 关键代码如下: For Each TName In NameS If mName LCase TName Then List1 AddItem TName pid my th32ProcessID pname mName Dim mProcID As Long mProcID OpenProcess 1&amp; 1&...

    HOOK任务管理器TerminateProcess的软件源码

    根据提供的文件信息,本文将详细解释“HOOK任务管理器TerminateProcess的软件源码”中涉及的关键知识点和技术细节。 ### 一、Hook技术简介 Hook(钩子)是一种在Windows操作系统中广泛使用的机制,用于捕获特定...

    Delphi查找和杀死进程小例子

    4. **杀死进程**:当需要结束某个进程时,首先需要通过`OpenProcess`函数获取目标进程的句柄,然后调用`TerminateProcess`函数,传入进程句柄和退出状态码,即可结束指定进程。请注意,这一步骤需要足够的权限,否则...

    自动关闭指定进程源代码(VB)

    本文将深入探讨如何使用VB编写程序来自动关闭指定的进程,这是一个非常实用的技术,尤其对于系统管理和自动化任务。 首先,我们需要了解Windows操作系统中的进程。进程是执行中的应用程序,每个进程都有一个唯一的...

    使用HOOK拦截任务管理器中直接杀进程的消息

    具体来说,我们需要关注的是`OpenProcess`和`TerminateProcess`两个API函数,它们分别用于获取其他进程的句柄和终止指定进程。 实现HOOK的基本思路如下: 1. **创建自定义函数**:编写与`OpenProcess`和`...

Global site tag (gtag.js) - Google Analytics