Hola,
Supongo que no te costaría demasiado traducir a C++ el código que mostraré a continuación, porque además de lo que se trata es de utilizar básicamente funciones de la API de Windows. Tampoco es que sea una gran cosa el código de abajo, sino que espero que pueda darte alguna idea por lo menos:
Código Delphi
[-]
program ClubDelphi;
{$APPTYPE CONSOLE}
uses Windows, SysUtils;
var
dummy: dword;
password: string;
continuar: boolean;
bufferInput: TInputRecord;
begin
password := '';
continuar := true;
Write('Escribe tu password: ');
while continuar do
begin
ReadConsoleInput(GetStdHandle(STD_INPUT_HANDLE), bufferInput, 1, dummy);
case bufferInput.EventType of
KEY_EVENT:
begin
if bufferInput.Event.KeyEvent.bKeyDown then
begin
password := password + bufferInput.Event.KeyEvent.UnicodeChar;
Write('*');
end;
if bufferInput.Event.KeyEvent.bKeyDown
and (bufferInput.Event.KeyEvent.wVirtualKeyCode = VK_RETURN) then
begin
Writeln('');
if (Trim(password) = 'clubdelphi') then
begin
Writeln('El password es correcto.');
Readln;
continuar := false;
end
else
begin
Writeln('El password es incorrecto.');
Readln;
continuar := false;
end;
end;
if bufferInput.Event.KeyEvent.bKeyDown
and (bufferInput.Event.KeyEvent.wVirtualKeyCode = VK_ESCAPE) then
begin
continuar := false;
end;
end;
end;
end;
end.
Me he basado principalmente en el artículo
Console applications in Delphi de Alex G. Fedorov (tiene 10 años el artículo de marras). También puede que te interese echar un vistazo a este otro artículo publicado en
The Code Project:
.NET Console Password Input By Masking Keyed-In Characters.
Por otro lado, aunque no he terminado de probarlo, puede que otra posible solución fuera la de que la entrada del usuario (el texto) se escribiera "negro sobre negro" de tal modo que no se viera "nada", que puede ser otra forma de ocultar lo que se escriba, quiero decir sin necesidad de mostrar los típicos asteriscos. Si esto último te interesa no dejes de revisar el artículo sobre "Consolas en Delphi" que cito más arriba y echa un vistazo a cómo se hace uso de la función del API de Windows: "FillConsoleOutputAttribute", por ejemplo.