如果需要结束其他进程的执行,可以使用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
本文介绍了一个使用VB编写的shellCmd类,该类提供了用于检查进程是否正在运行和强制终止进程的功能。通过调用Windows API函数如OpenProcess和TerminateProcess,实现了对指定进程ID的进程进行操作。
3761

被折叠的 条评论
为什么被折叠?



