How to disable echo in windows console?

2020-07-27 03:27发布

How do I disable echo in a windows console C application?

I don't really want to capture characters with _getch (I still want Ctrl-C) to work. Besides _getch only seems to disable echo for cmd but not in cygwin.

There must be a way to redirect the pipe or modify the console settings.

2条回答
劳资没心,怎么记你
2楼-- · 2020-07-27 04:12

Yes, the easiest way to do it my opinion would be to use freopen to basically change the file opened behind the stdout file descriptor.

You could redirect the console output to a file using

freopen("C:\some_file.txt", "w", stdout);

If you don't want to store the output at once, you should be able to write a /dev/null like (/dev/null is in Unix), but in windows (that I don't have you can try "nul" or "\Device\Null"

So something like the following should work :

freopen("\Device\Null", "w", stdout);

Sorry I can't actually try that out since I don't have windows, but that's the main idea.

查看更多
相关推荐>>
3楼-- · 2020-07-27 04:15

Maybe SetConsoleMode (stolen from 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
查看更多
登录 后发表回答