我基本上試圖在vb.net裏面運行一個基於java控制檯的程序並且顯示輸出讓我們說一個正常的文本框並且還有另一個文本框鍵入程序的輸入。是否有可能做到這一點?在VB內運行基於Java控制檯的程序'10
1
A
回答
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
下面是一些樣板代碼(確保有txtInput
和txtOutput
的形式):
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
是多行。
添加錯誤需要檢查。
相關問題
- 1. 從Eclipse控制檯運行java程序
- 2. 無法運行基於FastMember的控制檯應用程序
- 3. 基於測試控制檯的應用程序/程序 - Java
- 4. 基於控制檯的應用程序到基於Java的GUI應用程序
- 5. 基於控制檯的密鑰監聽程序Java
- 6. 從控制檯運行java
- 7. 我如何從java控制檯運行控制檯應用程序?
- 8. Java - 如何在Windows中運行控制檯程序
- 9. 在Unix下運行java控制檯程序
- 10. 無控制檯運行Win32程序「silient」
- 11. 保持運行C++程序控制臺?
- 12. 運行C#控制檯應用程序
- 13. 從Windows服務運行基於COM的c#控制檯應用程序(c#)
- 14. 將Java控制檯應用程序作爲守護程序運行(後臺)
- 15. Java控制檯程序
- 16. 在後臺運行的服務或控制檯應用程序?
- 17. 控制遠程運行Java SE程序
- 18. 從其他控制檯應用程序運行控制檯應用程序
- 19. 在沒有控制檯的情況下運行minGW控制檯程序
- 20. 從cmd.exe運行時,基於C的控制檯應用程序崩潰,在VS2008調試器中運行良好?
- 21. NetBeans IDE - 如何通過控制檯運行Java應用程序
- 22. 如何一直運行Java控制檯應用程序?
- 23. NoClassDefFoundError的運行Java從控制檯
- 24. 運行c#控制檯應用程序內置記事本++
- 25. 如何在後臺運行.NET控制檯應用程序
- 26. 在後臺運行控制檯應用程序
- 27. 如何在後臺運行控制檯應用程序(無UI)?
- 28. 獨立於測試從控制檯運行程序
- 29. 正常結束基於控制檯的多線程程序
- 30. 暫停在控制檯2內運行的bash中的進程
謝謝!還有一種方法可以將輸入提供給控制檯嗎? –
不客氣:)嗯,你可以使用命令行參數來啓動你的程序(如上所述)。然後,你可以發送鍵擊產生的進程。檢查這個問題的方式來做到這一點:http://stackoverflow.com/questions/2686865/how-can-i-send-keypresses-to-a-running-process-object –