用OpenProcess、GetExitCodeProcess和TerminateProcess关闭进程

如果需要结束其他进程的执行,可以使用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

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值