问题
When creating a process in VB6 (related to this question:), I'm using the following struct:
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
Before I start my process, what needs to happen to STARTUPINFO.hStdOutput in order for my VB6 app to read the output of my hosted process?
Thanks!!
回答1:
Following up this other question by the OP, I post an alternative method to execute a command and get hold of 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
回答2:
Microsoft gives here an example on how to do it.
回答3:
See AttachConsole(ATTACH_PARENT_PROCESS)
来源:https://stackoverflow.com/questions/571230/how-do-i-read-the-standard-output-from-a-child-process-in-vb6