How to read Console buffer in VBNET?

微笑、不失礼 提交于 2019-12-03 00:39:15

问题


I've seen a C# example using ConsoleRead API function but when I've tried to translate it to VBNET I get a lots of errors, also in other sites like pinvoke the unique example is for C# too, I can't find any good information for VBNET of ConsoleRead API function (if exist a way to read the console buffer without APIS then I get no idea).

Also I've tried this console buffer reader Class for VBNET (http://pastebin.com/XYxakDTV) but it throws an unhandled exception with message like this "Controller not valid".

Someone could illustrate me and all other people with an example for VBNET of how to launch a process from a GUI app (WindowsForm) to read the console output to retrieve characters/strings?

UPDATE:

I'm not sure but I think that a launched process (using System.Process Class) does not assign the console to the app so I think that all the examples seen here in MSDN could not help me: http://msdn.microsoft.com/en-us/library/system.console.aspx


回答1:


Use

StandardOutput.Read

I think that the answer is the same as for your other question Run a commandline process and get the output while that process still running?

Edit you are asking for an form application to read console output. So let's have a console application ():

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 

It generates a space separated numbers one per second. Now the forms application. Let's have a form with a multiline 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

It writes the numbers to the TextBox one per a line. There is no API magic but it works.



来源:https://stackoverflow.com/questions/19229052/how-to-read-console-buffer-in-vbnet

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!