在Windows中,如何为不同的控制台进程获取标准设备句柄?

时间:2012-09-03 16:51:18

标签: windows winapi console io-redirection

我知道我可以调用AttachConsoleGetStdHandle kernel32函数来访问不同控制台进程的控制台屏幕缓冲区,但是如果此进程将其输入/输出/错误重定向到文件或设备,我怎样才能获得这些重定向位置的句柄?

说清楚:我无法控制我试图附加的应用程序,这是由第三方提供的,所以我使用IPC的机会很少。

2 个答案:

答案 0 :(得分:2)

GetStdHandle将遵循任何重定向并返回redirected handle;

  

进程的标准句柄可以通过调用重定向   SetStdHandle,在这种情况下,GetStdHandle 会返回重定向的内容   处理

该链接还描述了如何申请原件。

答案 1 :(得分:0)

您可以使用CreateRemoteThread将代码插入其他进程并从那里调用GetStdHandle。然后,您需要使用DuplicateHandle在您自己的流程中制作句柄的副本。

请记住,使用该句柄执行的任何操作都会影响目标进程中的句柄,这可能会导致意外问题。例如,如果两个进程都试图从标准输入流中读取,那么您将无法预测哪一个将看到输入的哪一部分,并且如果两个进程都写入标准输出流,则输出可能会随机重叠方式或一组输出可能会覆盖另一方。