是否有可能拦截来自另一个进程的控制台调用?

情况是我有程序通过system()CreateProcess()

现在,有可能做的东西,该程序输出数据到控制台。 我的意思是当程序输出它。 这不是等到最后,收集数据然后处理它,而是在这个外部程序调用它想打印的数据的控制台的那一刻,然后获得这些数据,处理它并输出其他的东西安慰。

最简单的方法通常是用_popen(your_program, "r");启动程序_popen(your_program, "r"); 。 这将返回一个你可以读取的FILE * ,它读取的内容将是孩子写入其标准输出的内容。 当您在该文件上读取EOF时,这意味着子进程已经终止。 这使得读取和处理来自孩子的输出变得相对容易。

在Linux上,创建一个命名管道:

 system("mkfifo pipename") 

然后在第一个程序中打开管道,并使用以下命令启动程序:

 system("program > pipename") 

我不知道如何在Windows上做到这一点。

在创建子进程之前调用AllocConsole,或使用AttachConsole(ChildPID)函数(在父进程中)。 之后,您可以使用任何ReadConsoleXXX或WriteConsoleXXX函数。