2009-02-20 16 views
0

Lors de la création d'un processus en VB6 (lié à this question :), j'utilise la struct suivante:Comment lire la sortie standard d'un processus fils dans 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 

Avant de commencer mon processus, ce qui doit arriver à STARTUPINFO.hStdOutput pour que mon VB6 application pour lire la sortie de mon processus hébergé?

Merci!

Répondre

5

Faisant suite this other question by the OP, je posterai une autre méthode pour exécuter une commande et mettre la main sur 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 
+0

Excellent, merci !! – Pwninstein

+0

Cela fonctionne parfaitement! Merci! Est-il possible de masquer la fenêtre (dans ce cas, une fenêtre de console) pendant l'exécution du processus enfant? – Pwninstein

+0

Je ne crains pas. Pour une raison quelconque, seule la méthode "shell.Run" peut cacher la fenêtre. Mais là, vous n'obtiendrez pas de stdout. Si ignorer la fenêtre n'est pas une option pour vous, vous êtes de retour à la méthode d'appel API Win32 à nouveau. – Tomalak

2

Microsoft donne ici un exemple sur la façon de le faire.

+0

Excellent, merci! J'ai aussi trouvé cet exemple (qui est similaire): http://www.visualbasic.happycodings.com/Graphics_Games_Programming/code3.html – Pwninstein

0

Voir AttachConsole(ATTACH_PARENT_PROCESS)

Questions connexes