这里演示了一个执行Notepad,Notepad完成关闭后继续执行你的程序。
Private Const SYNCHRONIZE = &H100000
Private Const INFINITE = -1&
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As LongDim pId As Long, pHnd As LongPrivate Sub Command1_Click()
pId = Shell("Notepad", vbNormalFocus)
pHnd = OpenProcess(SYNCHRONIZE, 0, pId)
Call WaitForSingleObject(pHnd, INFINITE)
Call TerminateProcess(pHnd, 0)
Call CloseHandle(pHnd)
MsgBox "执行完成"
End Sub
Private Const SYNCHRONIZE = &H100000
Private Const INFINITE = -1&
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As LongDim pId As Long, pHnd As LongPrivate Sub Command1_Click()
pId = Shell("Notepad", vbNormalFocus)
pHnd = OpenProcess(SYNCHRONIZE, 0, pId)
Call WaitForSingleObject(pHnd, INFINITE)
Call TerminateProcess(pHnd, 0)
Call CloseHandle(pHnd)
MsgBox "执行完成"
End Sub
public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long,
ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
public Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long,
lpExitCode As Long) As Long
public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Longpublic Const PROCESS_QUERY_INFORMATION = &H400
public Const STATUS_PENDING = &H103&
Public Function RunShell(cmdline As String) As Boolean
Dim hProcess As Long
Dim ProcessId As Long
Dim exitCode As Long
ProcessId = Shell(cmdline, 1)
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcessId)
Do
Call GetExitCodeProcess(hProcess, exitCode)
DoEvents
Loop While exitCode = STATUS_PENDING
Call CloseHandle(hProcess)
RunShell = True
End Function '在需要的地方调用RunShell过程,如:res=RunShell("c:\windows\notepad.exe")
'返回值为真则程序结束