Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-02-2007
Avatar de aeff
aeff aeff is offline
Miembro
 
Registrado: oct 2006
Ubicación: Cuba, Guantánamo
Posts: 348
Poder: 20
aeff Va camino a la fama
Simular password char en Consola

hola colegas, resulta que se me ha presentado una curiosidad, y es que como logro que en C, cuando trabajo con las famosas consolas, como hago la entrada de los datos de forma parecida a las que los Edites visuales permiten hacer con su propiedad PasswordChar, ?me entienden amigos? salu2!!! y gracias de antemano, aeff!!
Responder Con Cita
  #2  
Antiguo 02-02-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.142
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
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
    // Leemos del "input" de la consola
    ReadConsoleInput(GetStdHandle(STD_INPUT_HANDLE), bufferInput, 1, dummy);

    // Comprobamos el tipo de evento que tenemos entre manos
    case bufferInput.EventType of

      // Si se trata de un evento "del teclado"...
      KEY_EVENT:
      begin
        // Comprobamos si lo que ha ocurrido es que se presionó una tecla
        if bufferInput.Event.KeyEvent.bKeyDown then
        begin
          // Y pasamos a guardar los caracteres tecleados en la variable "password"
          password := password + bufferInput.Event.KeyEvent.UnicodeChar;
          Write('*');
        end;

        // Si la tecla pulsada resulta ser "RETURN"...
        if bufferInput.Event.KeyEvent.bKeyDown
         and (bufferInput.Event.KeyEvent.wVirtualKeyCode = VK_RETURN) then
        begin
          // Aprovechamos para comprobar si la contraseña resulta correcta
          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;

        // Si se pulsa la tecla "ESCAPE" salimos del bucle
        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.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 02-02-2007 a las 19:19:05.
Responder Con Cita
  #3  
Antiguo 02-02-2007
Avatar de aeff
aeff aeff is offline
Miembro
 
Registrado: oct 2006
Ubicación: Cuba, Guantánamo
Posts: 348
Poder: 20
aeff Va camino a la fama
ok man, muchas gracias, ahora veré que puedo hacer con los códigos que me mostraste, trateré de llevarlos a C, saludos y muchas gracias, espero que si me surge alguna duda pueda contar contigo y con los otros colegas del club verdad?? gracias, salu2!!
Responder Con Cita
  #4  
Antiguo 02-02-2007
Avatar de aeff
aeff aeff is offline
Miembro
 
Registrado: oct 2006
Ubicación: Cuba, Guantánamo
Posts: 348
Poder: 20
aeff Va camino a la fama
ok man, muchas gracias, ahora veré que puedo hacer con los códigos que me mostraste, trateré de llevarlos a C,

saludos y muchas gracias, espero que si me surge alguna duda pueda contar contigo y con los otros colegas del club verdad??

gracias, salu2!!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Pasar un valor int a char locorez Varios 3 26-01-2006 03:01:57
conversion char a date gmontes Firebird e Interbase 2 23-09-2005 20:27:32
Pasar string a char Sayuri Varios 3 09-08-2005 16:35:29
error en variables char carlosmoralesm C++ Builder 1 19-03-2005 20:22:23
password char clx ? Alex2000 Varios 1 15-12-2003 18:14:13


La franja horaria es GMT +2. Ahora son las 03:05:55.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi