![]() |
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 |
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 |
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
|
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 |
Re: Passworteingabe bei einer Konsolenanwendung
Ich vermute mal du meinst das hier:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin Edit1.PasswordChar:='*'; end; |
Re: Passworteingabe bei einer Konsolenanwendung
Zitat:
@MrKnogge: Unter Linux wird auch nicht angezeigt, wie viele Buchstaben man schon eingegeben hat. |
Re: Passworteingabe bei einer Konsolenanwendung
:oops: peinlich peinlich...
Bei so was arbeite ich NOCH IMMER im TurboPascal. Da geht so was NOCH einfach ;-) |
Re: Passworteingabe bei einer Konsolenanwendung
Hi,
hier ein kleines Bsp.
Code:
Wie man sieht, wird hier Backspace etc. nicht berücksichtigt. Es werden auch nicht nur alphanumerische Zeichen angenommen. Das ist Dein Part ;-).
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. Gruß, Markus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz