| |
VB.NET - FortgeschritteneKommandozeilenprogramm ausführen und Ausgabe live auslesen | | | Autor: igor.sm | Datum: 07.12.07 15:32 |
| Hi!
Die überschrift sagt eigentlich schon was ich versuchen will... Ich habe das Programm "ffmpeg.exe", ein Kommandozeilen-Videodecoder. Wenn ich nun folgenden Code ausführe, tut FFMPEG was es soll, ich kann aber die Ausgabe nicht liive auslesen...
Dim p As new Process
p.StartInfo.FileName = "ffmpeg.exe"
p.StartInfo.Arguments = "-i test.mpeg test.flv"
p.StartInfo.UseShellExecute = False
p.StartInfo.RedirectStandardOutput = True
p.StartInfo.CreateNoWindow = True
Dim sOutput As String
p.Start()
sOutput = p.StandardOutput.ReadToEnd()
p.WaitForExit()
p.Close()
MsgBox(sOutput) dann hier mein Versuch das ganze Live auszulesen:
Dim p As new Process
p.StartInfo.FileName = "ffmpeg.exe"
p.StartInfo.Arguments = "-i test.mpeg test.flv"
p.StartInfo.UseShellExecute = False
p.StartInfo.RedirectStandardOutput = True
p.StartInfo.CreateNoWindow = True
Dim sOutput As String
p.Start()
Do 'Schleife
sOutput = p.StandardOutput.ReadToEnd 'lese aus
textbox1.text = sOutput _
'setzte Textbox text auf ausgelesenes
System.Threading.Thread.Sleep(50) 'Lasse Programm kurz
' luftholen
My.Application.DoEvents() 'UI aktiv
' halten
If p.HasExited Then _
'Wenn Programm zu dann raus aus der Schleife...
Exit Do
End If
Loop
p.Close()
' MsgBox(sOutput) Da Passiert dann rein gar nichts. FFmpeg berechnet trotzdem die richtige Datei, ich bekomme halt nur keine Ausgabe...
Weiß da jemand Hilfe?
Igor
I dream of gardens in the desert sand... | |
Re: Kommandozeilenprogramm ausführen und Ausgabe live auslesen | | | Autor: Maywood | Datum: 07.12.07 16:57 |
| Such am besten mal nach "Process OutputDataReceived".
Hier ein Beispiel:
Sub Test()
Dim p As New Process
AddHandler p.OutputDataReceived, AddressOf ProcessOutputDataReceived
p.StartInfo.FileName = "ping.exe"
p.StartInfo.Arguments = "-t vbarchiv.de"
p.StartInfo.UseShellExecute = False
p.StartInfo.RedirectStandardOutput = True
p.Start()
p.BeginOutputReadLine()
p.WaitForExit()
End Sub
Private Sub ProcessOutputDataReceived(sender As Object, e As _
DataReceivedEventArgs)
Console.WriteLine ( e.Data )
End Sub | |
Re: Kommandozeilenprogramm ausführen und Ausgabe live auslesen | | | Autor: Maywood | Datum: 10.12.07 12:58 |
| Okay. Nur, warum und wieso benützt du hierfür ein Timer? Wenn du es wirklich ordentlich machen möchtest, dann verwende lieber Delegates / EventHandler:
Delegate Sub UpdateTextBoxTextDelegate(text As String)
Sub Button1Click(ByVal sender As Object, ByVal e As EventArgs)
Test()
End Sub
Sub Test()
With New Process()
AddHandler .OutputDataReceived, AddressOf ProcessOutputDataReceived
.StartInfo.FileName = "ping.exe"
.StartInfo.Arguments = "-t vbarchiv.de"
.StartInfo.UseShellExecute = False
.StartInfo.RedirectStandardOutput = True
.StartInfo.CreateNoWindow = True
.StartInfo.WindowStyle = ProcessWindowStyle.Hidden
.Start()
.BeginOutputReadLine()
End With
End Sub
Private Sub UpdateTextBoxText ( text As String )
#if DEBUG then
Debug.WriteLine ( text )
#endif
If Me.checkBox1.Checked Then '// Append text
me.textBox1.AppendText ( text + Environment.NewLine )
Else
me.textBox1.Text = text
End If
End Sub
Private Sub ProcessOutputDataReceived(sender As Object, e As _
DataReceivedEventArgs)
If Not String.IsNullOrEmpty ( e.Data ) Then
Me.Invoke ( New UpdateTextBoxTextDelegate (AddressOf UpdateTextBoxText), New _
Object () { e.Data })
End If
End Sub >> dass die Ausgabe von der Kommandozeile nicht immer eine neue Zeile dazumacht, sondern die schon stehende Ausgabezeile ändert... (ob das jetzt jemand versteht )
So ungewöhnlich ist das nicht. Nicht alle Programme erzeugen für Ihre Ausgabe eine neue Zeile... | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats März 2024 Dieter OtterUTF-8 Konvertierung von Dateien und StringsVB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. Neu! sevCoolbar 3.0
Professionelle Toolbars im modernen Design!
Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access Weitere Infos
|
|
|
Copyright ©2000-2024 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|