1

こんにちは、ビジュアルベーシックを使用して、コマンドプロンプトに送信したコマンドの応答を文字列にキャプチャする必要があります。キャプチャしたらすぐに文字列から読み取りたいです。次のコードは、次のディレクトリ「C:\」に Pingfolder というフォルダーがあり、egsample C:\Pingfolder とその内部に「ping.txt」という txt ファイルがある場合に機能します。 .txt このコードは、ping 応答を ping.txt ファイルに書き込みます。

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim NewProcess As New Process
        Dim StartInfoProcess As New System.Diagnostics.ProcessStartInfo
        StartInfoProcess.FileName = "cmd"
        StartInfoProcess.RedirectStandardInput = True
        StartInfoProcess.RedirectStandardOutput = True
        StartInfoProcess.UseShellExecute = False
        StartInfoProcess.CreateNoWindow = True
        NewProcess.StartInfo = StartInfoProcess
        NewProcess.Start()
        Dim SIOSW As System.IO.StreamWriter = NewProcess.StandardInput
        SIOSW.WriteLine("cd\")
        SIOSW.WriteLine("cd Pingfolder")
        SIOSW.WriteLine("ping www.google.com > ping.txt")
        SIOSW.WriteLine("Exit")
        SIOSW.Close()
    End Sub

上記のコードでは、SIOSW.WriteLine("ping www.google.com > ping.txt") は www.google.com に ping を実行し、応答を ping.txt に保存します"。上記のコードでは、応答を次のようにキャプチャします。文字列を ping.txt ファイルに書き込むのではなく、次のようなものが必要です。

dim theresault as string
theresault = SIOSW.WriteLine("ping www.google.com")
messagebox.show(theresault)
4

2 に答える 2

1

NewProcess で OutputDataReceived イベントをリッスンする必要があります。

ここのドキュメントを参照してください: http://msdn.microsoft.com/en-us/library/system.diagnostics.process.outputdatareceived.aspx

于 2013-08-28T08:17:12.527 に答える
0

以下により、文字列への応答を読み取ることができます

     Dim thestring As String
   Dim SIOSR As System.IO.StreamReader = NewProcess.StandardOutput
    thestring = SIOSR.ReadToEnd

コードは次のとおりです 以下の完全なコード これにより、コマンドが送信され、応答が文字列として保存され、メッセージとして表示されます

Dim NewProcess As New Process
Dim StartInfoProcess As New System.Diagnostics.ProcessStartInfo
Dim thestring As String
StartInfoProcess.FileName = "cmd"
StartInfoProcess.RedirectStandardInput = True
StartInfoProcess.RedirectStandardOutput = True
StartInfoProcess.UseShellExecute = False
StartInfoProcess.CreateNoWindow = True
NewProcess.StartInfo = StartInfoProcess
NewProcess.Start()
Dim SIOSW As System.IO.StreamWriter = NewProcess.StandardInput
Dim SIOSR As System.IO.StreamReader = NewProcess.StandardOutput
SIOSW.WriteLine("ping www.google.com")
Threading.Thread.Sleep(15000)
SIOSW.WriteLine("Exit")
thestring = SIOSR.ReadToEnd
    MessageBox.Show(thestring)
SIOSW.Close()
SIOSR.Close()
于 2013-08-28T08:33:58.037 に答える