谢谢,
   我执行的这个BAT命令执行的时间较长, 约10分钟,一直都是等 BAT执行完再执行别的代码,结果是一执行BAT,主界面就像死机一样,现在 想让 BAT 能另开一个 线程或进程 ,我在主窗口判断 是否结束, 这样主窗口就不会像死机一样
    Dim si   As SHELLEXECUTEINFO
    si.cbSize = Len(si)
    si.lpVerb = "open"
    si.lpFile = "temp.bat"
    si.lpParameters = ""
    si.lpDirectory = ""
    si.nShow = 5             'SW_SHOW = 5
                             'SW_HIDE = 0
                             'SW_MINIMIZE = 6
                             'SW_RESTORE = 9
    si.fMask = &H40      'SEE_MASK_NOCLOSEPROCESS    ShellExecuteEx si
                 
    If si.hProcess <> 0 Then
       WaitForSingleObject si.hProcess, &HFFFFFFFF      '  无限等待,  直到程式结束
       CloseHandle si.hProcess
    End If

解决方案 »

  1.   

    waitforsingleobject(多个任务的话就是waitformultiobject)可以知道程序什么时候执行完毕
      

  2.   

    打开一个线程来执行此程序,判断线程是否结束,如果结束,表明此程序已执行完毕
    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 = &H103
    Sub ShellWait(FileName As String)
    Dim hShell As Long
    Dim hProc As Long
    Dim lExit As Long
    hShell = Shell(FileName, 3)
    hProc = OpenProcess(PROCESS_QUERY_INFORMATION, False, hShell)
    Do
        GetExitCodeProcess hProc, lExit
        DoEvents
    Loop While lExit = STILL_ACTIVE
    End SubPrivate Sub Command1_Click()
    ShellWait "f:\word.exe"
    MsgBox "运行完毕!"
    End Sub
    原文地址:http://community.csdn.net/Expert/topic/3675/3675075.xml?temp=.3692896
      

  3.   

    谢谢 badboy168(坏小子) 
      我试试先