私の質問は非常に単純ですが、解決策を見つけるのは絶対に不可能に思えます。
コンソール アプリケーションである専用のゲーム サーバー (JEDI ACADEMY JAMPDED) があります。いくつかの情報を継続的に書き込みます。データを何らかの方法で処理したいと考えています。その出力を外部で読めるようになれば簡単です。
問題: 標準出力に書き込まれないため、バッチ ファイルでパイプできず、popen も機能しません。
だから私はWINAPIでやりたかった。プロセスを作成できましたが、まだ出力を読み取ることができません。
私はこれらを試しました:
c++ で ::CreateProcess を呼び出して Windows 実行可能ファイルを起動するにはどうすればよいですか?
AND MSDNの公式の例ですが、それでも何もありません。
これは jampded.exe です。
Ingame から ConsoleInput を読み取る友人からビジュアルベーシック コードを入手したので、コンソールを読み取ることができると確信しています。
スニペット:
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
たぶん、これは私や他の人にも役立つかもしれません:)