WindowsではコンソールAPIを使用する必要があります。以下は、コンソールウィンドウでエコーを無効にするスニペットです。関数SetConsoleMode()
は、(他のものの中でも)エコーを制御するために使用されます。古いモードを保存するので、パスワードが取得されたらコンソールを復元できます。
また、*ConsoleMode()
関数には、コンソール入力バッファのハンドルが必要です。これらのバッファの処理方法については、CreateFile()
のMSDNドキュメントを参照してください。
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;
}
あなたは 'Cでgetch'を使用している++ではなく' cin.get'の任意の特定の理由をテストしましたか? –
理由はありません他の適切な方法を見つけることができませんでした。 –
@Cody:典型的なcin.get()とは異なり、getchは入力をエコーしません – ybungalobill