Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Passworteingabe bei einer Konsolenanwendung (https://www.delphipraxis.net/20348-passworteingabe-bei-einer-konsolenanwendung.html)

JamesBlond 16. Apr 2004 11:03


Passworteingabe bei einer Konsolenanwendung
 
Hallo!
Gibt es bei einer Konsolenanwendung auch die Möglichkeit, das was eingegeben wird nicht anzuzeigen oder halt dafür ein definiertes Zeichen anzeigen zu lassen?
Müßte in ner Konsolenanwendung ein Passwort einlesen... und im "klartext" wäre das ja ziemlich hässlich.
Danke!

Gruß

Matthias

c113plpbr 16. Apr 2004 13:44

Re: Passworteingabe bei einer Konsolenanwendung
 
Unter c/c++ gibt es nen 'Befehl' namens 'getch'. Damit kann man einzelne Zeichen von der Tastatur 'lesen', ohne dass diese angezeigt werden. Vielleicht gibt es etwas ähnliches auch unter Delphi?!?

ciao, Philipp

MrKnogge 16. Apr 2004 14:08

Re: Passworteingabe bei einer Konsolenanwendung
 
Es wäre aber schon praktisch, wenn der Benutzer sehen könnte, wieviel er von seinem Passwort schon eingegeben hat

c113plpbr 16. Apr 2004 14:22

Re: Passworteingabe bei einer Konsolenanwendung
 
Bei getch kriegst du die zeichen ja einzelnd. Also machst du ne abfrage rein, z.B. ob enter gedrückt wurde, womit du weist, dass jetzt das Pwd vollständig ist. Andernfalls lässt du eben ein Zeichen anzeigen, z.B. *. Das alles lässt du als 'endlosschleife' laufen, und es sollte funktionieren ...

ciao, Philipp

XeRo 16. Apr 2004 15:20

Re: Passworteingabe bei einer Konsolenanwendung
 
Ich vermute mal du meinst das hier:

Delphi-Quellcode:
 procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.PasswordChar:='*';
end;

Luckie 16. Apr 2004 15:22

Re: Passworteingabe bei einer Konsolenanwendung
 
Zitat:

Zitat von XeRo
Ich vermute mal du meinst das hier:

Delphi-Quellcode:
 procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.PasswordChar:='*';
end;

Wer lesen kann ist klar im Vorteil. Es geht um eine Konsolen Anwendung.

@MrKnogge: Unter Linux wird auch nicht angezeigt, wie viele Buchstaben man schon eingegeben hat.

XeRo 16. Apr 2004 15:29

Re: Passworteingabe bei einer Konsolenanwendung
 
:oops: peinlich peinlich...

Bei so was arbeite ich NOCH IMMER im TurboPascal. Da geht so was NOCH einfach ;-)

DaFox 16. Apr 2004 16:30

Re: Passworteingabe bei einer Konsolenanwendung
 
Hi,

hier ein kleines Bsp.

Code:
uses
  Windows, SysUtils;

function KeyPressed: Boolean;
var
  NumEvents: DWORD;
begin
  If GetNumberOfConsoleInputEvents(GetStdhandle(STD_INPUT_HANDLE), NumEvents) then
    KeyPressed := NumEvents > 0
  else
  begin
    WriteLn(Format('GetNumberOfConsoleInputEvents failed, reason: %s',
                   [SysErrorMessage(GetLastError)]));
    KeyPressed := true;
  end;
end;

function ReadKey: Char;
var
  InputBuf: Char;
  NumRead: DWord;
begin
  InputBuf := #0;
  If ReadConsole(GetStdhandle(STD_INPUT_HANDLE), @InputBuf, 1, NumRead, nil) then
    Result := InputBuf
  else
  begin
    WriteLn(Format('ReadConsole failed, reason: %s',
                   [SysErrorMessage(GetLastError)]));
    Result := #0;
  end;
end;

function GetInputmode: DWord;
begin
  Result := 0;
  GetConsoleMode(GetStdHandle(STD_INPUT_HANDLE), Result);
end;

var
  ch: Char;
  str: String;

begin
  str := '';
  SetConsoleMode(GetStdhandle(STD_INPUT_HANDLE), GetInputmode and
                 not (ENABLE_WINDOW_INPUT or ENABLE_MOUSE_INPUT or
                 ENABLE_LINE_INPUT or ENABLE_ECHO_INPUT));
  while true do
  begin
    if KeyPressed then
    begin
      ch := ReadKey;
      if ch <> #13 then
      begin
        str := str + ch;
        Write('*');
      end else break;
    end;
  end;
  WriteLn;
  WriteLn('user input: ' + str);
  ReadKey;
end.
Wie man sieht, wird hier Backspace etc. nicht berücksichtigt. Es werden auch nicht nur alphanumerische Zeichen angenommen. Das ist Dein Part ;-).

Gruß,
Markus


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz