我用shell命令对文件进行压缩,但是因为压缩时间太长造成下面程序要开始运行了,而这里压缩还没结束。
   请问如何使程序能够在那里等待直至SHELL压缩文件结束!
   感激不尽先!

解决方案 »

  1.   

    '这是一个等待HHELL执行完毕后再运行的例子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, ByRef lpExitCode As Long) As Long
    Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)Private Const PROCESS_QUERY_INFORMATION As Long = (&H400)
    Private Const STILL_ACTIVE As Long = &H103Sub ShellWait(FileName As String)
    Dim hShell As Long
    Dim hProc As Long
    Dim lExit As LonghShell = Shell(FileName, vbNormalFocus)
    hProc = OpenProcess(PROCESS_QUERY_INFORMATION, False, hShell)    Do
            GetExitCodeProcess hProc, lExit
            DoEvents
        Loop While lExit = STILL_ACTIVE
    End SubPrivate Sub Command1_Click()
    ShellWait "C:\WINNT\system32\calc.exe"
    MsgBox "ÔËÐÐÍê±Ï!"
    End Sub
      

  2.   

    '不好意思,有乱码.
    Private Sub Command1_Click()
    ShellWait "C:\WINNT\system32\calc.exe"
    MsgBox "运行完毕!"
    End Sub
      

  3.   

    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 WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
    Private Const SYNCHRONIZE As Long = &H100000
    Private Const INFINITE As Long = &HFFFFFFFFPrivate Sub Command1_Click()
        Dim pId As Long, pHnd As Long
        pId = Shell("Notepad", vbNormalFocus)
        pHnd = OpenProcess(SYNCHRONIZE, 0, pId)
        If pHnd <> 0 Then
            Call WaitForSingleObject(pHnd, INFINITE)
            Call CloseHandle(pHnd)
        End If
        MsgBox ""
    End Sub
      

  4.   

    提个问题,如果一个批处理BAT文件有多个EXE需执行,如何等待BAT执行完后再执行后续VB语句?