Consola de lectura Buffer / Salida C ++

Mi pregunta es bastante simple, pero la solución me parece absolutamente imposible de encontrar.

Tengo un servidor de juegos dedicado (JEDI ACADEMY JAMPDED), que es una aplicación de consola. Escribe alguna información continuamente y quiero manejar los datos de alguna manera. Sería fácil si pudiera leer la salida con externo.

Problema: no escribe en la salida estándar, por lo que no se puede canalizar con el archivo por lotes y popen no funciona también.

Así que quise hacer con WINAPI. Pude crear el proceso, pero aún no puedo leer el resultado.

Probé estos:

¿Cómo llamo a :: CreateProcess en c ++ para iniciar un ejecutable de Windows?

CreateProcess y CreatePipe para ejecutar un proceso y devolver la salida como una cadena en VC ++

Y el ejemplo oficial de MSDN, pero todavía nada.

Este es el jampded.exe:

Recibí un código visual básico de mi amigo, que lee ConsoleInput de Ingame, así que estoy bastante seguro de que es posible leer la consola:

RETAZO:

Global hWnd = FindWindow_(#Null,"Jedi Knight Academy MP Console")              ;console window
Global hWnd2 = FindWindow_(#Null,"Jedi Knight®: Jedi Academy (MP)")            ;actual game window
Global inputhWnd = FindWindowEx_(hwnd,0,"edit",0)                                         ;the one to send stuff to
Global consolehWnd = FindWindowEx_(hwnd,inputhWnd,"edit",0)                      ;the one to read the console from


Procedure checkConsole()
    Protected wholetext.s, oldtext.s,text.s, checkname.s
    Repeat   
        wholetext = getText()
        If wholetext
            text = StringField(wholetext,CountString(wholetext,#CRLF$),#CRLF$)
            If oldtext <> text
                oldtext = text
                analyseConsole(@text)
            EndIf
        EndIf
        Delay(20)
        writePreferences()
    Until quit
EndProcedure

Procedure.s getText()
    Protected wholetext.s
    If hWnd And hWnd2
        If Not inputhWnd Or Not consolehWnd
            inputhWnd = FindWindowEx_(hWnd,0,"edit",0)
            consolehWnd =  FindWindowEx_(hWnd,inputhWnd,"edit",0)
        EndIf
        length = SendMessage_(consolehWnd, #WM_GETTEXTLENGTH, 0, 0)
        wholetext = Space(length)
        SendMessage_(consolehWnd,#WM_GETTEXT,length + SizeOf(Character),@wholetext)
        ProcedureReturn wholetext
    Else 
    If FindWindow_(#Null,"Jedi Knight Academy MP Console")
        hWnd = FindWindow_(#Null,"Jedi Knight Academy MP Console")
        hWnd2 = FindWindow_(#Null,"Jedi Knight®: Jedi Academy (MP)")
        inputhWnd = FindWindowEx_(hwnd,0,"edit",0)
        consolehWnd = FindWindowEx_(hwnd,inputhWnd,"edit",0)
    EndIf
    ProcedureReturn ""
    EndIf
    If @wholetext > 0
        FreeMemory(@wholetext)
    EndIf
EndProcedure

Tal vez esto podría ayudarme a mí y a otros también :)

Respuestas a la pregunta(1)

Su respuesta a la pregunta