2016-10-29 4 views
-1

私が作成しようとしているこのプログラムの助けが必要です。 私は一般的にプログラミングには新しかったので、私に同行してください。vb.netで私自身のCMDを作成する

私が今作成しようとしているのは、私自身のコマンドプロンプトです。それで、コマンドプロンプトで何をしたいのか教えてください。

Windows OSシステムの通常のCMDからわかっているように、「start google.com」や「ipconfig」などのコマンドを入力するために使用できる入力ボックスがあります。 と入力したコマンドの結果を示す出力があります。

私はまったく同じものを作成したいと思います。私自身のUIと、後で追加する予定のいくつかのエクストラを作成したいと思います。

私のテキストボックスにシェルコマンドを入力して実行すると例外メッセージが表示されるので、基本的にコマンドは実行されません。ここで

は、コードは次のとおりです。

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 

可能であれば、私は新たなんだと私はおそらく例なしの理解が十分でないため、私は本当に、いくつかの例をしたいと思います。

+0

'Shell()'の代わりに[Process.Start](https://msdn.microsoft.com/en-us/library/53ezey2s.aspx)を使用してください。 – Filburt

+0

はい、でも "ipconfig"コマンドを使いたいのですが。それはまだprocess.startで選択可能でしょうか? – GuestAnon

+0

コマンドラインパラメータを必要とするコマンドを使用する場合は、Shell()がパラメータを許可しないため、Process.Startのみを使用できます。 – Filburt

答えて

1

シェルの代わりにプロセスオブジェクトを使用すると、cmdとの会話のオプションの方がずっと優れています。コマンドを渡してコマンドの応答を返すことができる単純な関数の例を次に示します。この例は、ただ一つのコマンド/レスポンスを行いますが、あなたはcmd.exeのでダイアログに入力するには、次のように同じプロセスを使用することができます。

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 

そして、あなたは上記のコードを実行した場合、あなたはわかりますように、することができます必ずipconfigのようなコマンドを使用してください

+0

ありがとう、これは私が持っていた問題を助けました:)私はそれを感謝します。 – GuestAnon

+0

Hey man、虚偽のコマンドや存在しないコマンドを作成するたびに、msgboxで出力するたびに、richtextbox1.textに例外が出力される可能性があります。そして、私が "iowgoier"や "lmao"のような呼び出しをしたり、呼び出し/コマンドの "開始"を表示しないと、問題を認識せず、入力したものと全く同じものを出力します。 – GuestAnon

+0

問題はありませんプロセスの標準エラーの処理を追加する必要があります。上記のexecutecommand関数の編集を参照してください。 – soohoonigan

関連する問題