2009-02-20 4 views
0

При создании процесса в VB6 (связанный с this вопрос :), я использую следующую структуру:Как читать стандартный вывод дочернего процесса в VB6?

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 

Перед тем, как начать свой процесс, что должно произойти, чтобы STARTUPINFO.hStdOutput для того, чтобы мой VB6 приложение для чтения результатов моего хостинга?

Спасибо!

ответ

5

Вслед за this other question by the OP я выкладываю альтернативный метод, чтобы выполнить команду и разжиться стандартный вывод:

' 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 
+0

Отлично, спасибо! – Pwninstein

+0

Это работает отлично! Благодаря! Есть ли способ скрыть окно (в данном случае окно консоли) во время выполнения дочернего процесса? – Pwninstein

+0

Боюсь, что нет. По какой-то причине только метод «shell.Run» может скрыть окно. Но там вы не получите stdout. Если игнорировать окно не является для вас вариантом, вы снова возвращаетесь к методу вызова Win32 API. – Tomalak

2

Microsoft дает здесь пример о том, как это сделать.

+0

Отлично, спасибо! Я также нашел этот пример (который похож): http://www.visualbasic.happycodings.com/Graphics_Games_Programming/code3.html – Pwninstein

0

См AttachConsole(ATTACH_PARENT_PROCESS)