3

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.

RunHolt
  • 1,832
  • 2
  • 19
  • 26

2 Answers2

7

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
Robᵩ
  • 154,489
  • 17
  • 222
  • 296
  • 1
    same idea used in [cross-platform code](http://code.google.com/p/xpost/source/browse/src/lib/xpost_compat.c#87) covers the windows case nicely. – luser droog Aug 28 '14 at 04:30
  • 2
    Here's an [updated link](https://github.com/luser-dr00g/xpost/blob/3063f60d342251754f5e78f454ffb5e69687fa9b/src/lib/xpost_compat.c#L132) for the above comment – Cogwheel May 15 '19 at 21:08
0

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.

AaronO
  • 475
  • 3
  • 6