Capture texto de la ventana CMD que ya se está ejecutando (VB.NET)

Hay una aplicación que funciona más o menos las 24 horas del día, los 7 días de la semana en esta computadora. Se ejecuta dentro de una ventana de símbolo del sistema. Me gustaría poder capturar todo el texto que se muestra actualmente en la ventana.

La aplicación ya se está ejecutando (y por razones no relacionadas, no se puede iniciar desde VB), por lo que no puedo simplemente redirigir la salida del proceso para guardar el texto.

Mi método actual para capturar el texto es con el siguiente código:

SendKeys.SendWait("^(a)")
SendKeys.SendWait("^(a)")
SendKeys.SendWait("{enter}")

Dim CmdText As String = Clipboard.GetText
Clipboard.Clear()

El código anterior envía un comando de seleccionar todo a la ventana (lo envía dos veces, de lo contrario no se captura el texto completo de la ventana). Luego presiona la tecla Intro para cargarlo en el portapapeles. Luego guardo el contenido del portapapeles en una variable. Funciona bien, pero el problema principal es que requiere que la ventana esté enfocada.

¿Hay alguna forma de capturar el texto de la ventana CMD si actualmente está fuera de foco?

Editar: creo que me estoy acercando a encontrar una solución usando sendmessage / postmessage. Aquí está el código actual:

Private Declare Function PostMessage Lib "user32.dll" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long

Private Const WM_CHAR As Long = &H102
Private Const VK_CONTROL = &H11
Private Const VK_RETURN = &HD

Public Function GetWindowHandle(ByVal processName As String) As IntPtr
    processName = System.IO.Path.GetFileNameWithoutExtension(processName)
    Dim p() = Process.GetProcessesByName(processName)
    Return If(p.Length > 0, p(0).MainWindowHandle, IntPtr.Zero)
End Function

Private Sub GetText()

Dim h As Long = GetWindowHandle("programname.exe")
SendMessage(h, WM_CHAR, 1, 0) 'suppose to simulate Ctrl + A
SendMessage(h, WM_CHAR, 1, 0) 'suppose to simulate Ctrl + A

PostMessage(h, WM_KEYDOWN, VK_RETURN, 0) 'sends enter key to load text into clipboard

End Sub

El problema es que en lugar de enviar Ctrl + A a la ventana de comandos, solo envía el texto ^ A. ¿Algunas ideas?

Respuestas a la pregunta(1)

Su respuesta a la pregunta