Буфер Консоли Чтения / Выход C ++

Мой вопрос довольно прост, но решение кажется абсолютно невозможным для меня.

У меня есть выделенный игровой сервер (JEDI ACADEMY JAMPDED), который является консольным приложением. Он постоянно пишет некоторую информацию, и я хочу как-то обработать данные. Было бы легко, если бы я мог прочитать вывод с внешнего.

Проблема: он не пишет в стандартный вывод, поэтому можетт пипеткой с командным файлом и popen тоже не работает.

Поэтому я хотел сделать с WINAPI. Я смог создать процесс, но все еще могут читать вывод.

Я попробовал это:

Как мне вызвать :: CreateProcess в C ++ для запуска исполняемого файла Windows?

CreateProcess и CreatePipe для выполнения процесса и возврата вывода в виде строки в VC ++

И официальный пример MSDN, но все равно ничего.

Это jampded.exe:

Я получил базовый визуальный код от моего друга, который читает ConsoleInput из Ingame, поэтому яЯ уверен, что консоль можно прочитать:

SNIPPET:

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

Может быть, это может помочь мне и другим тоже :)

Ответы на вопрос(1)

Ваш ответ на вопрос