2014-01-26 40 views

回答

1

你基本上需要創建一個帶有參數的新進程,這個參數是你的文本框的輸入。然後,你可以捕捉程序的輸出,將其存儲在一個變量,並顯示在對話框中。

這裏有一個小片斷:

Dim command As String = "C:\My Dir\MyFile.exe" 
Dim args As String = "MyParam1 MyParam2" 

Dim proc = New Process() With { _ 
    Key .StartInfo = New ProcessStartInfo() With { _ 
    Key .FileName = "program.exe", _ 
    Key .Arguments = args, _ 
    Key .UseShellExecute = False, _ 
    Key .RedirectStandardOutput = True, _ 
    Key .CreateNoWindow = True _ 
    } _ 
} 

proc.Start() 

While Not proc.StandardOutput.EndOfStream 
    Dim line As String = proc.StandardOutput.ReadLine() 
    ' do something with the line 
End While 
+0

謝謝!還有一種方法可以將輸入提供給控制檯嗎? –

+0

不客氣:)嗯,你可以使用命令行參數來啓動你的程序(如上所述)。然後,你可以發送鍵擊產生的進程。檢查這個問題的方式來做到這一點:http://stackoverflow.com/questions/2686865/how-can-i-send-keypresses-to-a-running-process-object –

0

下面是一些樣板代碼(確保有txtInputtxtOutput的形式):

Private m_process As Process 
Private m_encoding_for_program As System.Text.Encoding 

Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

    m_encoding_for_program = System.Text.Encoding.GetEncoding(866) 'Adjust as needed 

    Dim psi As New ProcessStartInfo 
    psi.CreateNoWindow = True 
    psi.UseShellExecute = False 
    psi.FileName = "cmd.exe" 
    psi.RedirectStandardInput = True 
    psi.RedirectStandardError = True 
    psi.StandardErrorEncoding = m_encoding_for_program 
    psi.RedirectStandardOutput = True 
    psi.StandardOutputEncoding = m_encoding_for_program 

    m_process = Process.Start(psi) 
    AddHandler m_process.OutputDataReceived, AddressOf OutputDataReceived 
    AddHandler m_process.ErrorDataReceived, AddressOf OutputDataReceived 'Make different handler if needed. 
    m_process.BeginOutputReadLine() 
    m_process.BeginErrorReadLine() 

End Sub 

Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed 
    m_process.CancelOutputRead() 
    m_process.CancelErrorRead() 
    m_process.Kill() 
End Sub 

Private Sub TextBox1_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtInput.KeyUp 
    If e.KeyCode = Keys.Enter Then 
     Dim b = m_encoding_for_program.GetBytes(txtInput.Text) 
     m_process.StandardInput.BaseStream.Write(b, 0, b.Length) 
     m_process.StandardInput.WriteLine() 
    End If 
End Sub 

Private Sub OutputDataReceived(ByVal sender As Object, ByVal e As DataReceivedEventArgs) 
    Me.Invoke(CType(AddressOf Me.ThreadProcSetter, Action(Of Object)), e.Data) 
End Sub 

Private Sub ThreadProcSetter(ByVal text As Object) 
    txtOutput.AppendText(DirectCast(text, String) & ControlChars.NewLine) 
End Sub 

txtInput輸入命令,然後按回車看結果。確保txtOutput是多行。
添加錯誤需要檢查。

相關問題