我想在输入和输出上执行GetConsoleMode(),因为我想更改一些标志。
输入为pretty straightforward:
HANDLE hStdin;
DWORD fdwSaveOldMode;
hStdin = GetStdHandle(STD_INPUT_HANDLE);
GetConsoleMode(hStdin, &fdwSaveOldMode)
另一方面,输出看起来并不容易,有人会认为只放置STD_OUTPUT_HANDLE就足够了,但是"help" pages谈到必须制作和设置自己的缓冲区。
这一点,以及page about handles提及:
在CreateFile调用中指定CONOUT $值以打开控制台活动屏幕缓冲区的句柄。
听起来像是一个线索,但是坦白说,我不确定这到底是什么意思。有人能告诉我如何正确地做吗?为什么输出和输入如此不同?
谢谢大家!
1条答案
按热度按时间qpgpyjmq1#
有人可能会认为,只输入
STD_OUTPUT_HANDLE
就足够了"Clearing the Screen" example有一个代码片段演示如何设置控制台输出模式,它使用
GetStdHandle()
:GetStdHandle
不能与控制台特定函数一起工作的一些情况是,应用程序不是控制台模式(您可以通过调用AllocConsole
在GUI模式应用程序中获得控制台),或者stdout
被重定向。在这种情况下,你需要通过
CreateFile
和特殊的文件名"CONOUT$"
打开一个控制台句柄,这样就可以访问一个控制台,如果一个控制台与你的进程相关联,即使stdout
没有Map到那个控制台。