抓取程序的控制台输出

ult*_*tus 3 c++ sockets windows console

我正在为一家公司创建一个网络管理程序,我正在做一些合同工作(我认为无关紧要)

作为该计划的一部分,我想有一个控制台/ telnet(类型)克隆.我有一个工作目录系统,我可以在其中读取目录中的所有文件,并更改目录.我也有一个简单的FTP协议设置.但是,我想以编程方式随意地使用标准输入/输出程序对不同的程序说话.我并不反对DLL注入技术和其他方法,因为这是一个良性的程序.如果可能的话,如果我可以轻松直接使用控制台,那将是非常棒的.(system()可能会工作,但这不允许继续通信或读回输出)

到目前为止,我正在考虑抓住PATH环境变量并将其用于std命令(ipconfig,netstat等)我的网络库使通信变得简单,但我只是不确定如何与程序的控制台进行交互......

TL; DR:

程序之间是否有任何预定义的标准控制台通信方式?

Jer*_*fin 5

最简单的方法通常是生成子程序_popen.这将为您提供一个句柄来写入孩子的标准输入,或从孩子的标准输出中读取.

如果你需要两者兼顾,那么事情就会变得更加丑陋.您通常必须自己创建匿名管道并在调用中指定它们CreateProcess,坦率地说,这是一种痛苦.


kic*_*hik 5

正如Jerry所说,你正在寻找的是一个管道(CreatePipe).实际上有两个 - 一个用于输入,一个用于输出.然后创建新进程,并将它们设置为传递给CreateProcess的STARTUPINFO中的 stdin/stdout/stderr .然后,您可以使用WriteFile,ReadFile,PeekNamedPipe和朋友进行通信.

MSDN上提供了一个完整的示例:

http://msdn.microsoft.com/en-us/library/ms682499(v=vs.85).aspx

并确保你不会陷入这些常见的陷阱(幸运的是,Raymond Chen最近碰巧记录了这一点):

PS,这对于使用子进程模块的Python来说太简单了.