shell的返回值是执行进程的句柄,如果变为0那就是该进程已执行完毕

解决方案 »

  1.   

    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