我需要使用
windows api获取(或管道)已经运行的进程的输出.
基本上我的应用程序应该允许用户选择一个窗口来管道输入,所有输入将显示在控制台中.我也会考虑如何在stderr之后得到一个管道.
重要提示:我没有使用CreateProcess()或其他方式启动该过程.该进程已经在运行,我所有的都是进程的句柄(从GetWindowThreadProcessId()返回).
无论你想做什么,你都做错了.如果您正在与具有源代码的程序进行交互,请为IPC创建一个定义的界面:创建一个套接字,一个命名管道,Windows消息传递,共享内存段,COM服务器或您所喜欢的IPC机制.不要尝试将IPC移植到不想做IPC的程序上.
你无法控制该进程的stdout设置,而不是你的混乱.它是由父母的过程创造的,并交给孩子,从那里开始,它控制着孩子. You don’t go in and change the carpets in somebody else’s house.
甚至没有想到进入这个过程,试图关闭它的stdout,并创建一个新的stdout指向你的管道.这是灾难的秘诀,会导致古怪的行为和“不可能”的崩溃.
即使你能做你想做的事,what would happen if two programs did this?