2010-10-11 72 views
2

重定向控制台程序的标准输入/输出是一件小事,但如果程序使用高级控制台功能呢?像输出彩色文本一样,将光标放在四周并直接操作控制台缓冲区?那也可以被捕获并重定向到我自己的程序进行处理?是否可以完全捕获Windows控制台应用程序的控制台输出(包括高级操作)?

注意:我正在谈论我的应用程序(不一定是控制台应用程序)运行控制台应用程序并将其输入/输出重定向到本身的场景。注2:最后我要C#代码,但现在让我们坚持使用纯粹的Win32 API和C或C++。无论如何,我认为没有PInvoke就没有可能,所以让我们先来看一下基本原理(如果可能的话)。

回答

3

与Linux不同,所有颜色IO不会被简单的重定向捕获,因此捕获它的唯一方法是挂接WinAPI调用(即您需要拦截系统调用),这需要管理权限,易碎并且可疑。

+0

更不用说在DEP启用的机器上可能会失败。 :P你肯定**,这是唯一的方法? – 2010-10-11 09:49:48

+0

IIRC,Windows NT在stdin/stdout/stderr之外并没有真正的“高级控制台API”,所以近似于'cmd.exe'“终端模拟器” - 通过GUI前端完成,可以这么说。我记得我正在制作这样的应用程序,很多月前,我对这种情况感到沮丧:( – Piskvor 2010-10-11 09:52:04

+0

挂钩API调用单个进程不需要管理权限,除非您的应用程序在LUA下运行,并且目标应用程序被升高 – snemarch 2010-10-11 10:01:57

相关问题