2016-08-04 2 views
0

VB 2010을 사용하여 외부 Windows 콘솔 (cmd.exe)에서 실행되는 응용 프로그램을 자동화하고 있습니다. 외부 콘솔을 정상적으로 계속 사용하고 싶지만, 때로는 VB 응용 프로그램에서 콘솔 텍스트를 캡처하고 싶습니다.VB.net을 사용하여 Windows 콘솔 응용 프로그램의 텍스트를 얻으려면 어떻게해야합니까?

... 
Dim As IntPtr = FindWindow destination ("ConsoleWindowClass", "consoleapp") 
SendMessage (destination, WM_CHAR, VK_RETURN, "") 
... 

그러나,이 콘솔 창에 표시되는 텍스트를 얻을 수없는 것 : 나는 예를 들어, 사용하여 내 VB 응용 프로그램의 버튼에서 콘솔 에 텍스트 명령을 보낼 아무런 문제가 없습니다. 나는 표준 출력 리디렉션을 사용하여 시도 :

... 
oStartInfo = New ProcessStartInfo ("consoleapp.exe") 
oStartInfo.UseShellExecute = False 
oStartInfo.RedirectStandardOutput = True 
oProcess.StartInfo = oStartInfo 
oProcess.Start() 
... 

을 그리고 내가 사용하는 출력 스트림을 읽어

.... 
Dim oStreamReader As System.IO.StreamReader = oProcess.StandardOutput 
sOutput = oStreamReader.ReadLine() 
.... 

내 VB 응용 프로그램의 표준 출력을 읽을 수있는이 방법을,하지만 난 콘솔을 사용할 수 없습니다 콘솔에 텍스트가 표시되지 않기 때문입니다 (리디렉션 된 이후!). 반면에 콘솔 프로세스가 시작되면 표준 출력 경로 재 지정을 변경할 수 없습니다.

또한 'GetWindowText'를 사용하려고했지만 다른 응용 프로그램에 속한 창에서는 작동하지 않습니다.

다음 없기 때문에 지금은 'sendMessage 첨부'와 'WM_GETTEXT'을 사용하고 있습니다 :

... 
Dim windowhandle As IntPtr = FindWindow ("ConsoleWindowClass", "consoleapp") 
Dim ChildHandle As IntPtr = FindWindowEx (windowhandle, IntPtr.Zero, Nothing, Nothing) 
Dim RcvText As String 

'Alloc memory for the buffer That recieves the text 
Dim mybuffer As IntPtr = Marshal.AllocHGlobal (200) 

'The WM_GETTEXT Send Message 
SendMessage (ChildHandle, WM_GETTEXT, 200, mybuffer) 

'Copy the characters from the unmanaged memory to a managed string 
RcvText = Marshal.PtrToStringUni(mybuffer) 

'Display the string 
Debug.Print (RcvText) 
... 

을하지만 얻을 모두가 이상한 텍스트 문자열하지만, ​​콘솔의 텍스트 내용의 아무것도. 콘솔 윈도우가 자식 윈도우가 없기 때문에

, 나는 sendMessage 첨부 (Windowhandle ...) 대신에 sendMessage 첨부 (ChildHandle ...), 을 사용하려고하지만 결과는

는 ... 또한 이상한 문자열입니다 VB를 사용하여 Windows 콘솔의 텍스트를 읽을 수있는 방법이 있습니까?

도움 주셔서 감사합니다.

+0

가능한 중복을 읽어야 http://stackoverflow.com/questions/186822/ 캡쳐 - 콘솔 출력에서 ​​- net-application-c) –

+0

@KenWhite OP는 창을 표시 할 원래 콘솔에 사용할 수 있도록하면서 출력을 캡처하기 때문에 그것은 중복되지 않습니다. – GSerg

+0

콘솔 응용 프로그램의 코드를 변경하여 출력을 txt 파일에 쓰고 응용 프로그램에서 읽을 수 있습니까? – BanForFun

답변

-1

은 몇 가지 옵션이 있지만이 콘솔 텍스트를 [.NET 응용 프로그램에서 캡처 콘솔 출력 (C 번호)] (의

Console.ReadLine() 
+0

콘솔 텍스트를 읽고 변수에 할당해야합니다. 'Dim input as string input = console.readline() ' –

+0

console.readline() 메소드는 표준 입력 스트림에서 다음 문자 행을 읽지 만 콘솔 출력 스트림을 읽길 원합니다. – JoeMac

관련 문제