Hallo,
ich habe auf pastebin einen interessanten Code gefunden mit dem man angeblich CMD in einer Windows Form ausführen kann und dieses Programm dann auch Befehle entgegen nimmt. Das klang recht interessant daher habe ich mir das mal einfach angesehen.
Gleichzeitig habe ich das selbst einmal implementiert, das Programm scheint auch wirklich sowas wie ping XYZ ausführen zu können. Bei tree C:\ scheitert es jedoch
Warum ist das so, laut Code müsste das Programm doch merken wenn ein Argument hinzugefügt wurde, was ja auch bei ping XYZ funktioniert. Mich würde jetzt brennend interessieren, wie man dies korrigieren könnte?
Code mal als Zitat von Pastebin:
ich habe auf pastebin einen interessanten Code gefunden mit dem man angeblich CMD in einer Windows Form ausführen kann und dieses Programm dann auch Befehle entgegen nimmt. Das klang recht interessant daher habe ich mir das mal einfach angesehen.
Gleichzeitig habe ich das selbst einmal implementiert, das Programm scheint auch wirklich sowas wie ping XYZ ausführen zu können. Bei tree C:\ scheitert es jedoch
Warum ist das so, laut Code müsste das Programm doch merken wenn ein Argument hinzugefügt wurde, was ja auch bei ping XYZ funktioniert. Mich würde jetzt brennend interessieren, wie man dies korrigieren könnte?
Code mal als Zitat von Pastebin:
VB.NET-Quellcode
- Public Class Form1
- Private psi As ProcessStartInfo
- Private cmd As Process
- Private Delegate Sub InvokeWithString(ByVal text As String)
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- Try
- cmd.Kill()
- Catch ex As Exception
- End Try
- TextBox2.Clear()
- If TextBox1.Text.Contains(" ") Then
- psi = New ProcessStartInfo(TextBox1.Text.Split(" ")(0), TextBox1.Text.Split(" ")(1))
- Else
- psi = New ProcessStartInfo(TextBox1.Text$)
- End If
- Dim systemencoding As System.Text.Encoding
- System.Text.Encoding.GetEncoding(Globalization.CultureInfo.CurrentUICulture.TextInfo.OEMCodePage)
- With psi
- .UseShellExecute = False
- .RedirectStandardError = True
- .RedirectStandardOutput = True
- .RedirectStandardInput = True
- .CreateNoWindow = True
- .StandardOutputEncoding = systemencoding
- .StandardErrorEncoding = systemencoding
- End With
- cmd = New Process With {.StartInfo = psi, .EnableRaisingEvents = True}
- AddHandler cmd.ErrorDataReceived, AddressOf Async_Data_Received
- AddHandler cmd.OutputDataReceived, AddressOf Async_Data_Received
- cmd.Start()
- cmd.BeginOutputReadLine()
- cmd.BeginErrorReadLine()
- End Sub
- Private Sub Async_Data_Received(ByVal sender As Object, ByVal e As DataReceivedEventArgs)
- Me.Invoke(New InvokeWithString(AddressOf Sync_Output), e.Data)
- End Sub
- Private Sub Sync_Output(ByVal text As String)
- TextBox2.AppendText(text & Environment.NewLine)
- TextBox2.ScrollToCaret()
- End Sub
- End Class