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

时间:2012-06-07 16:16:04

标签: c++ windows console interception

情况是我的程序是通过system()CreateProcess()启动的。

现在,是否有可能在程序将数据输出到控制台时执行操作。我的意思是当程序输出它。这不是等待结束,收集数据然后处理它,但只是在这个外部程序调用控制台时它想要打印的数据,然后获取该数据,处理它并输出其他内容控制台。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

system("mkfifo pipename")

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

system("program > pipename")

我不确定如何在Windows上执行此操作。

答案 2 :(得分:0)

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