从控制台窗口(C++应用程序)重定向到文本框(C#应用程序)

3

我正在创建一个需要运行另一个应用程序的应用程序(C#)。这个应用程序是游戏(C ++,Directx7,GDI,我没有源代码),它从静态dll中显示控制台窗口以进行调试。

为了显示控制台窗口,该dll具有以下几行代码:

AllocConsole();
freopen("CONIN$","rb",stdin);   
freopen("CONOUT$","wb",stdout);
freopen("CONOUT$","wb",stderr);

在我的C#应用程序中,我想隐藏控制台窗口并将文本从控制台窗口重定向到文本框。为了隐藏控制台窗口,我使用WinAPI的FindWindow,ShowWindow没有问题。但是我如何将文本(输出)从控制台窗口重定向到文本框?

假设您从命令行开始游戏,您会在启动游戏的命令行中看到预期的输出吗? - VladL
是的,我看到了预期的输出。 - user1950843
1个回答

1
您可以使用以下代码运行游戏:
     Process process = new Process();
     process.StartInfo.FileName = "\"" + pathToGame + "\"";
     //process.StartInfo.Arguments = args;
     process.StartInfo.RedirectStandardOutput = true;
     process.StartInfo.RedirectStandardError = true;
     process.StartInfo.UseShellExecute = false;
     process.OutputDataReceived += new DataReceivedEventHandler(ReadOutput);
     process.ErrorDataReceived += new DataReceivedEventHandler(ReadOutput);

     process.Start();
     process.BeginOutputReadLine();
     process.BeginErrorReadLine();

     //process.WaitForExit();

CL 输出和错误将会在这里显示

  private static void ReadOutput(object sender, DataReceivedEventArgs e)
  {
     if (e.Data != null)
     {
        //your output here
     }
  }

@user1950843,有时即使没有文本输出,此事件也会触发。如果您确实像评论中所说的那样看到了输出,那么它在某个时候将不为null。请不要使用断点,而是将e.Data写入文件。 - VladL
我正在写文件,但是它是空的。也许问题在操作系统上?我有安装更新的Windows 8企业版。也许这段代码可以在Windows XP上运行,但那是太老的操作系统了。 - user1950843
@user1950843 再说一遍。你从命令行运行游戏,例如 C:\Program Files\MyGame>mygame.exe。你在同一个命令行中看到了期望的输出吗? - VladL
不,我在创建游戏的新窗口中看到了期望的输出。 - user1950843
我发现了一些有趣的网页: http://msdn.microsoft.com/en-us/library/ms682073(v=vs.85).aspx 明天会进行研究。目前我有点累了。 - user1950843
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接