はじめに: 私は現在、ゲーム「Sniper Elite V2」の専用サーバーで作業している管理者です。SEV2 の専用サーバーは、コンソール アプリケーションのウィンドウの下で実行されます。wineHQ を使用して、このアプリケーションを Linux でも実行できます。コンソールが新しいウィンドウで起動されることを除いて、すべてが良好であるため、コンソールの入力/出力を取得する方法はありません (リンク: http://img802.imageshack.us/img802/650/sev22.png )。さらに、「このプログラムは DOS モードでは実行できません」と (HEX エディターで) 読み取ることができます。私の目的は、DOS 互換性を取り戻すことです。
私の考えは、 C++で (CodeBlocks を使用して)記述された別のコンソール アプリケーションを作成することです。この「フック」は、専用サーバー「ウィンドウ」のコンテンツ (テキスト) を取得して表示し、もちろん専用サーバー コンソールにコマンドを入力することもできます。このように、Windows と Linux の両方で入力/出力を操作できるようになります。時間をかけて少しスキーマを描きました: http://img195.imageshack.us/img195/3017/29585679.png
私の質問は次のとおりです。これを行う方法は?どの関数を使用すればよいですか?
この時点で、私は立ち往生しています。私は次のアプローチを試しました:
FUNC " AttachConsole
" が失敗しました。
次の疑似コードも失敗しました。
mainWindow = FindWindow( TEXT("ConsoleWindowClass"), NULL) );
console = FindWindowEx( mainWindow, NULL, TEXT("ConsoleWindowClass"), NULL );
SendMessage(
console,
WM_GETTEXT,
sizeof(buffer) / sizeof(TCHAR),
(LPARAM)buffer);
" " というツールを使用していますが、このツール自体ではSniper Elite V2 Dedicated ServerWinSpy++
にデータを取得/入力することはできません。
アイデア/例/反省は大歓迎です:-)