【发布时间】:2012-02-09 20:05:03
【问题描述】:
如何在 Windows 控制台 C 应用程序中禁用回显?
我真的不想用_getch 捕获字符(我仍然希望Ctrl-C)起作用。此外 _getch 似乎只为cmd 禁用回显,但在cygwin 中没有。
必须有办法重定向管道或修改控制台设置。
【问题讨论】:
如何在 Windows 控制台 C 应用程序中禁用回显?
我真的不想用_getch 捕获字符(我仍然希望Ctrl-C)起作用。此外 _getch 似乎只为cmd 禁用回显,但在cygwin 中没有。
必须有办法重定向管道或修改控制台设置。
【问题讨论】:
可能是SetConsoleMode(盗自codeguru):
#include <iostream>
#include <string>
#include <windows.h>
int main()
{
HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
DWORD mode = 0;
GetConsoleMode(hStdin, &mode);
SetConsoleMode(hStdin, mode & (~ENABLE_ECHO_INPUT));
std::string s;
std::getline(std::cin, s);
std::cout << s << "\n";
return 0;
}//main
【讨论】:
是的,我认为最简单的方法是使用 freopen 基本上更改在标准输出文件描述符后面打开的文件。
您可以使用以下命令将控制台输出重定向到文件
freopen("C:\some_file.txt", "w", stdout);
如果你不想一次存储输出,你应该可以写一个 /dev/null 像(/dev/null 在 Unix 中),但是在 windows 中(我没有你可以尝试“nul”或“\Device\Null”
所以应该像下面这样工作:
freopen("\Device\Null", "w", stdout);
抱歉,因为我没有窗户,所以我实际上无法尝试,但这是主要想法。
【讨论】: