如何在VB6中读取子进程的标准输出?

时间:2009-02-20 21:07:50

标签: winapi vb6 stdout

在VB6中创建进程时(与this问题:)相关,我使用以下结构:

Private Type STARTUPINFO
      cb As Long
      lpReserved As String
      lpDesktop As String
      lpTitle As String
      dwX As Long
      dwY As Long
      dwXSize As Long
      dwYSize As Long
      dwXCountChars As Long
      dwYCountChars As Long
      dwFillAttribute As Long
      dwFlags As Long
      wShowWindow As Integer
      cbReserved2 As Integer
      lpReserved2 As Long
      hStdInput As Long
      hStdOutput As Long
      hStdError As Long
   End Type

在开始我的流程之前,为了让我的VB6应用程序读取托管流程的输出,STARTUPINFO.hStdOutput需要做些什么?

谢谢!

3 个答案:

答案 0 :(得分:5)

跟进this other question by the OP后,我发布了一个替代方法来执行命令并获取stdout:

' References: "Windows Script Host Shell Object Model" '

Public Declare Sub Sleep Lib "kernel32" Alias "Sleep" ( _
  ByVal dwMilliseconds As Long)

Function ExecuteCommand(cmd As String, ExpectedResult as Long) As String
  Dim shell As New IWshRuntimeLibrary.WshShell
  Dim exec As IWshRuntimeLibrary.WshExec

  Set exec = shell.Exec(cmd)
  While exec.Status = 0
     Sleep 100
  Wend

  If exec.ExitCode = ExpectedResult Then
    ExecuteCommand = exec.StdOut.ReadAll
  Else
    ExecuteCommand = vbNullString     ' or whatever '
  End
End Function

答案 1 :(得分:2)

Microsoft在此提供了一个如何操作的示例。

答案 2 :(得分:0)

请参阅AttachConsole(ATTACH_PARENT_PROCESS)