我见过一个使用 ConsoleRead API 函数的 C# 示例,但是当我尝试将其转换为 VBNET 时,出现了很多错误,在其他网站(如 pinvoke)中,独特的示例也是针对 C# 的,我找不到任何好的示例ConsoleRead API 函数的 VBNET 信息(如果存在一种无需 APIS 即可读取控制台缓冲区的方法,那么我不知道)。
我还尝试过这个用于 VB NET 的控制台缓冲区读取器类(http://pastebin.com/XYxakDTV http://pastebin.com/XYxakDTV),但它会抛出一个未处理的异常,并显示类似“控制器无效”的消息。
有人可以用 VB NET 的示例来说明我和所有其他人如何从 GUI 应用程序(Windows 窗体)启动进程来读取控制台输出以检索字符/字符串?
UPDATE:
我不确定,但我认为启动的进程(使用 System.Process 类)不会将控制台分配给应用程序,所以我认为 MSDN 中看到的所有示例都无法帮助我:http://msdn.microsoft.com/en-us/library/system.console.aspx http://msdn.microsoft.com/en-us/library/system.console.aspx
Use
StandardOutput.Read
我认为答案与你的其他问题相同运行命令行进程并在该进程仍在运行时获取输出? https://stackoverflow.com/a/19301833/669527
编辑您要求表单应用程序读取控制台输出。那么让我们有一个控制台应用程序():
Module Module1
Sub Main()
While True
' data = Console.ReadKey.KeyChar
Dim Generator As System.Random = New System.Random()
Console.Write(Generator.Next(0, 100) & " ")
Threading.Thread.Sleep(1000)
End While
End Sub
End Module
它每秒生成一个空格分隔的数字。
现在是表格应用程序。让我们有一个多行表单TextBox
named txtResult
and a button
cmdStart
:
Private Sub cmdStart_Click(sender As Object, e As EventArgs) Handles cmdStart.Click
Dim ProcInfo As New ProcessStartInfo With
{.FileName = "DataApp.exe", .RedirectStandardOutput = True, .UseShellExecute = False}
Dim proc As Process = Process.Start(ProcInfo)
While Not proc.HasExited
Dim a As String = ChrW(proc.StandardOutput.Read)
If a = " " Then
txtResult.Text &= vbCrLf
Else
txtResult.Text &= a
End If
Threading.Thread.Sleep(100)
Application.DoEvents()
End While
End Sub
它将每行一个数字写入文本框。 API 没有魔法,但它确实有效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)