Vb6 等待外壳化进程和所有子进程

Vb6 等待外壳化进程和所有子进程,vb6,waitforsingleobject,Vb6,Waitforsingleobject,抱歉,这已经被回答了,我找不到了。我需要从vb6应用程序启动一个外部进程,并等待该进程完成后再继续。很简单。但是,我需要启动的进程依次启动一个子进程,然后退出。我需要等待子进程完成(和其他子进程) 现行守则: Private Const WAIT_INFINITE = -1& Private Const SYNCHRONIZE = &H100000 Private Declare Function OpenProcess Lib "kernel32" _ (ByVal dw

抱歉,这已经被回答了,我找不到了。我需要从vb6应用程序启动一个外部进程,并等待该进程完成后再继续。很简单。但是,我需要启动的进程依次启动一个子进程,然后退出。我需要等待子进程完成(和其他子进程)

现行守则:

Private Const WAIT_INFINITE = -1&
Private Const SYNCHRONIZE = &H100000

Private Declare Function OpenProcess Lib "kernel32" _
  (ByVal dwDesiredAccess As Long, _
   ByVal bInheritHandle As Long, _
   ByVal dwProcessId As Long) As Long

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

Public Sub ShellProcess(strProcess As String, Optional blnWait As Boolean = False)
   Dim hProc As Long
   Dim taskId As Long
   Dim cmdline As String

    cmdline = strProcess
    taskId = Shell(cmdline, vbNormalFocus)

    If blnWait = True Then
         hProc = OpenProcess(SYNCHRONIZE, True, taskId)
        Call WaitForSingleObject(hProc, WAIT_INFINITE)
        CloseHandle hProc
    End If

    MsgBox "The shelled app has ended."
End Sub

不久前,我在c#中成功地做到了这一点,但现在只有vb6可供使用。

@rags我可能遗漏了一些东西,但那篇文章没有解释如何确定被外壳化进程的所有子进程何时退出。有[win32 api]()可以枚举进程。可以找到child(通过测试ParentID),甚至可以递归地找到。但是,只有在所有进程都在运行的情况下完成快照时,此操作才会起作用。一旦一些父母结束,祖先的联系就会中断,计数也就不完整了。因此,了解孩子的创建/结束模式是必须的。提供的链接为您的问题提供了解决方案。。。只需尝试一下以下代码: