VB里使用shell调用某一个程序来生成一个txt文件,我在vb程序里如何知道该shell程序是否已经结束呢?
因为我需要在下面的程序里使用到该txt文件。
如果接着就使用这个txt文件,很可能txt文件还没完全写好,也有可能shell调用的那个程序由于参数问题,txt写入失败。另外shell(xxx.exe 参数)会有个返回值,请问这个返回值有意义吗?

解决方案 »

  1.   

    Dim pid As Long pid = Shell("C:\test.txt", vbNormalFocus) hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, 0, pid) isDone = False Do Call GetExitCodeProcess(hProcess, ExitCode) Debug.Print ExitCode DoEvents Loop While ExitCode = STILL_ALIVE Call CloseHandle(hProcess) isDone = True
      

  2.   

    ///返回值有意义吗返回一个 Variant (Double),如果成功的话,代表这个程序的任务 ID,若不成功,则会返回 0。
      

  3.   

    判断shellexecute打开的程序是否以关闭。(用的是shellexecute,不是shell,)把哪个MSGBOX语句改为一个布尔变量就可以判断程序是否以关闭了。
    Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
    Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
    Private Declare Function ShellExecuteEx Lib "shell32.dll" Alias "ShellExecuteExA" (lpInfo As Any) As Long
     
    Private Type SHELLEXECUTEINFO
           cbSize  As Long
           fMask  As Long
           hwnd  As Long
           lpVerb  As String
           lpFile  As String
           lpParameters  As String
           lpDirectory  As String
           nShow  As Long
           hInstApp  As Long
       
           '  Optional  members
           lpIDList  As Long
           lpClass    As String
           hkeyClass  As Long
           dwHotKey  As Long
           hIcon_OR_Monitor  As Long
           hProcess  As Long
    End Type
     
     Private Sub Form_Load()
        Dim si   As SHELLEXECUTEINFO
        si.cbSize = Len(si)
        si.lpVerb = "open"
        si.lpFile = "notepad.exe"
        si.lpParameters = ""
        si.lpDirectory = ""
        si.nShow = 5            'SW_SHOW
        si.fMask = &H40      'SEE_MASK_NOCLOSEPROCESS
        
        ShellExecuteEx si
        If si.hProcess <> 0 Then
            WaitForSingleObject si.hProcess, &HFFFFFFFF      '  无限等待,  直到程式结束
            CloseHandle si.hProcess
            MsgBox "程序运行完毕!"
        End If
    End Sub