Как вы делаете маскированный ввод пароля в Windows, используя перезапись символов?

В настоящее время я использую эту реализацию, чтобы скрыть пользовательский ввод при вводе пароля:

void setEcho(bool enable) {
  HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
  DWORD mode;
  GetConsoleMode(hStdin, &mode);

  if(enable) {
    mode |= ENABLE_ECHO_INPUT;
  } else {
    mode &= ~ENABLE_ECHO_INPUT;
  }

  SetConsoleMode(hStdin, mode);
}

Пользователь должен иметь возможность получить положительный отзыв о том, что вводится текст. Какие методы доступны в среде Win32 с использованием C++?

1 ответ

Решение

Решением является не использование stdio.h, а использование conio.h. Следующая процедура решает вышеуказанную проблему. Обратите внимание, что отключение эха больше не требуется:

void scanPass(char* passwordEntry, int length) {
  int index, ch;

  for(index = 0; index < (length - 1) && ((ch = _getch()) != EOF)
                                      && (ch != 13); index++) {
    passwordEntry[index] = (char)ch;
    _putch('*');
  }

  passwordEntry[index] = '\0';
}

Ответ в этом случае заключается в использовании правильного инструмента для работы. (И знать правильный инструмент.)

Другие вопросы по тегам