2016-10-29 3 views
-1

Ich brauche Hilfe mit diesem Programm, das ich versuche zu erstellen. Ich bin ziemlich neu im Programmieren, also bitte bitte mit mir.Erstellen meiner eigenen CMD in vb.net

Also was ich gerade versuche zu erstellen, ist meine eigene Eingabeaufforderung, und damit gesagt, lassen Sie mich Ihnen sagen, was ich in der Eingabeaufforderung will.

Wie wir von der normalen CMD auf Windows-Betriebssystemen wissen, haben wir unsere Eingabebox (oder was auch immer), die wir verwenden können, um Befehle wie "start google.com" oder "ipconfig" etc ... und wir haben unsere Ausgabe, die uns die Ergebnisse der von uns eingegebenen Befehle angibt.

Und ich möchte genau dasselbe schaffen, nur mit meiner eigenen Benutzeroberfläche und einigen Extras, die ich später hinzufügen werde.

Hier ist mein Problem tho, immer wenn ich den Shell-Befehl in meinem Textfeld und führen Sie es aus, es druckt die Ausnahmebedingungsnachricht aus, so im Grunde führt es nicht den Befehl. Hier

ist der Code:

Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress 
    Dim tmp As System.Windows.Forms.KeyPressEventArgs = e 
    If tmp.KeyChar = ChrW(Keys.Enter) Then 
     Try 
      Shell(TextBox1.Text) 
      RichTextBox1.SelectionColor = Color.Green 
      RichTextBox1.SelectedText = TextBox1.Text 
     Catch ex As Exception 
      RichTextBox1.Clear() 
      RichTextBox1.SelectionColor = Color.Red 
      RichTextBox1.SelectedText = ex.Message 
     End Try 
     TextBox1.Text = "" 
    Else 

    End If 
End Sub 

ich, wie einige Beispiele wirklich würde, wenn möglich, da ich neu bin und ich würde wahrscheinlich nicht viel verstehen, ohne Beispiele.

+0

Sie sollten [Process.Start] (https://msdn.microsoft.com/en-us/library/53ezey2s.aspx) anstelle von 'Shell()' verwenden. – Filburt

+0

Ja, aber was ist, wenn ich den Befehl "ipconfig" verwenden möchte. Wäre das mit process.start noch möglich? – GuestAnon

+0

Wenn Sie einen Befehl verwenden möchten, der Befehlszeilenparameter erfordert, können Sie nur Process.Start verwenden, da Shell() keine Parameter zulässt. – Filburt

Antwort

1

Die Verwendung eines Prozessobjekts anstelle einer Shell ist viel besser als eine Option für eine Konversation mit cmd. Hier ist ein Beispiel für eine einfache Funktion, an die Sie Befehle übergeben können, die die Antwort des Befehls zurückgibt. Dieses Beispiel hat nur einen Befehl/Antwort, aber Sie können den gleichen Prozess unten in einen Dialog einzutreten mit cmd.exe gezeigt verwenden:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    MsgBox(ExecuteCommand("ipconfig /all")) 
End Sub 

Private Function ExecuteCommand(ByVal command As String) As String 
    Dim response As String = Nothing 
    Dim p As New System.Diagnostics.Process 
    Dim psi As New System.Diagnostics.ProcessStartInfo("cmd.exe") 
    With psi 
     .UseShellExecute = False 
     .RedirectStandardInput = True 
     .RedirectStandardOutput = True 
     .RedirectStandardError = True 
     .CreateNoWindow = True 
    End With 
    p = Process.Start(psi) 
    With p 
     .StandardInput.WriteLine(command) 
     .StandardInput.Close() 
     If .StandardError.Peek > 0 Then 
      response = .StandardError.ReadToEnd 
      .StandardError.Close() 
     Else 
      response = .StandardOutput.ReadToEnd 
      .StandardOutput.Close() 
     End If 
     .Close() 
    End With 
    Return response 
End Function 

Und wie Sie sehen, wenn Sie den Code oben ausgeführt haben, können Sie verwenden Sie sicher Befehle wie ipconfig

+0

Danke Mann, das half mir mit dem Problem, das ich hatte :) Ich weiß es zu schätzen. – GuestAnon

+0

Hey Mann, ich habe ein anderes Problem, jetzt, wenn ich einen falschen Befehl oder einen Befehl mache, der nicht existiert, gibt es es in einer msgbox aus, könnte ich dies tun, gibt es die Ausnahme in meinem richtextbox1.text aus? Und wenn ich Anrufe wie "Iowgoier" oder "Lmao" oder etwas ohne "Start" vor dem Anruf/Befehl mache, erkennt es das Problem nicht und druckt genau das gleiche aus, was ich eingegeben habe. – GuestAnon

+0

Kein Problem , müssen nur einige Behandlung für den Prozess hinzufügen 'standartrorror ... Siehe Änderungen an der executecommand Funktion über – soohoonigan

Verwandte Themen