Буфер Консоли Чтения / Выход 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
Может быть, это может помочь мне и другим тоже :)