shell 函数是异步执行的,解决方法如下:module1: Option ExplicitPublic Const SYNCHRONIZE = &H100000 Public Const INFINITE = &HFFFFFFFF Public Const WAIT_TIMEOUT = &H102&Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long form1:Private Sub Command1_Click() Dim pId As Long, pHnd As Long pId = Shell("Notepad", vbNormalFocus) pHnd = OpenProcess(SYNCHRONIZE, 0, pId) If pHnd <> 0 Then WaitForSingleObject pHnd, INFINITE CloseHandle pHnd End If End Sub
Option ExplicitPublic Const SYNCHRONIZE = &H100000
Public Const INFINITE = &HFFFFFFFF
Public Const WAIT_TIMEOUT = &H102&Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
form1:Private Sub Command1_Click()
Dim pId As Long, pHnd As Long pId = Shell("Notepad", vbNormalFocus)
pHnd = OpenProcess(SYNCHRONIZE, 0, pId)
If pHnd <> 0 Then
WaitForSingleObject pHnd, INFINITE
CloseHandle pHnd
End If
End Sub