Win32:如何获取子进程输出缓冲区?

时间:2014-04-25 06:16:58

标签: c++ winapi redirect console-application

我正在使用CreateProcess(x)函数测试控制台标准I / O重定向,并将子进程输出重定向到匿名管道。不知何故,当我从管道输出读取时,我发现只有字符被重定向到管道,而不是使用WriteConsoleOutput(x)函数写入输出句柄的CHARINFO结构。

我想知道是否有任何方法可以重定向CHARINFO结构,以便我可以正确地将其显示到目标输出。

这是我到目前为止所做的步骤:

  1. 在控制台应用程序启动时,创建新的控制台缓冲区并将其设置为活动控制台缓冲区。
  2. 将新的控制台缓冲区大小和控制台窗口大小更改为最大允许值。
  3. 根据MSDN中的example节目创建匿名管道以及其他一些初始化管道的步骤,同时引用this文章。
  4. 使用STARTINFO结构生成子进程并将I / O / E重定向到新创建的管道。
  5. 启动新线程以侦听子进程输出。
  6. 将输出写入活动屏幕缓冲区,限制为较小的区域,例如屏幕缓冲区的下半部分。
  7. 第6步是我发现问题的地方。起初我虽然会得到CHARINFO结构,所以我尝试将readFile(x)函数的lpBuffer返回转换为CHARINFO struc数组。我马上看到了错误。当我检查lpBuffer时,我发现只存储在lpBuffer中的字符,而不是属性。

    在这种情况下,有没有办法重定向CHARINFO?如果是,我如何识别ReadFile(x)返回缓冲区是CHARINFO数组还是字符数组?需要区分,因为我无法控制子进程输出到控制台的方式。

0 个答案:

没有答案