Вам необходимо использовать консольный API в Windows.Ниже приведен фрагмент, который отключает эхо в окне консоли.Функция SetConsoleMode()
используется для управления эхом (среди прочего).Я сохраняю старый режим, чтобы после восстановления пароля я мог восстановить консоль.
Кроме того, для функций *ConsoleMode()
требуется дескриптор буфера ввода консоли.Как получить управление этими буферами, описано в документации MSDN CreateFile()
.
int main(int argc, char* argv[])
{
char password[100] = { 0 };
printf("Enter your password: ");
HANDLE hConsole = ::CreateFile("CONIN$", GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, 0, 0);
DWORD dwOldMode;
::GetConsoleMode(hConsole, &dwOldMode);
::SetConsoleMode(hConsole, dwOldMode & ~ENABLE_ECHO_INPUT);
bool bFinished = false;
while(!bFinished) {
if(!fgets(password, sizeof(password) / sizeof(password[0]) - 1, stdin)) {
printf("\nEOF - exiting\n");
} else
bFinished = true;
}
::SetConsoleMode(hConsole, dwOldMode | ENABLE_ECHO_INPUT);
printf("\nPassword is: %s\n", password);
return 0;
}