Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Win32:如何获取子进程输出缓冲区?_C++_Winapi_Redirect_Console Application - Fatal编程技术网

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

C++ Win32:如何获取子进程输出缓冲区?,c++,winapi,redirect,console-application,C++,Winapi,Redirect,Console Application,我正在使用CreateProcessx函数测试控制台标准I/O重定向,并将子进程输出重定向到匿名管道。不知何故,当我读取管道输出时,我发现只有字符被重定向到管道,而不是使用WriteConsoleOutputx函数写入输出句柄的CHARINFO结构 我想知道是否有任何方法可以重定向CHARINFO结构,以便将其正确显示到目标输出 以下是我迄今为止所做工作的步骤: 在控制台应用程序启动时,创建新的控制台缓冲区并将其设置为活动控制台缓冲区。 将新控制台缓冲区大小和控制台窗口大小更改为最大允许值。 根

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

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

以下是我迄今为止所做工作的步骤:

在控制台应用程序启动时,创建新的控制台缓冲区并将其设置为活动控制台缓冲区。 将新控制台缓冲区大小和控制台窗口大小更改为最大允许值。 根据MSDN中的显示,创建匿名管道和初始化管道的更多步骤,同时参考本文。 使用STARTINFO结构生成子进程,并将I/O/E重定向到新创建的管道。 启动新线程以侦听子进程输出。 将输出写入活动屏幕缓冲区,限制在一个小区域,例如屏幕缓冲区的下半部分。 第六步是我发现问题的地方。起初我以为我会得到CHARINFO结构,所以我尝试通过ReadFilex函数将lpBuffer return转换为CHARINFO struc数组。我立刻看到了错误。当我检查lpBuffer时,我发现只有字符存储在lpBuffer中,而不是属性


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

也许发布一些代码将有助于获得一些响应……事实上,我认为我找到了解决方案,但只找到了一半,现在正试图找出如何为[Everyone]创建安全描述符。[Everyone]安全描述符是空安全描述符