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