Entwickler-Ecke
Sonstiges (Delphi) - Eingegebene Buchstaben in Konsolenanwendung unkenntlich zeig
hoehlenpain - Sa 06.11.10 12:48
Titel: Eingegebene Buchstaben in Konsolenanwendung unkenntlich zeig
hallo... hab folgende frage:
wenn jemmand zB. seinen namen eingeben soll in ein konsolenprogramm... gibt es da einen code das der eingegebene buchstabe als sterne oder sonst was angezeigt wird?
bsp:
"name eingeben: "
****
so meine ich das ^^
lg pain
bummi - Sa 06.11.10 12:55
für * weiß ich nichts, vielleicht hilft Dir auch so was?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| hConsole := GetStdHandle(STD_INPUT_HANDLE); GetConsoleMode(hConsole, ConsoleMode); Write('Bitte Name eingeben:'); Readln(Name); Write('Bitte Passwort eingeben:'); SetConsoleMode(hConsole, ConsoleMode and not ENABLE_ECHO_INPUT); ReadLn(PW); SetConsoleMode(hConsole, ConsoleMode or ENABLE_ECHO_INPUT); Writeln(''); Writeln('Hallo: ' + Name + ' PW: '+ PW); Readln; |
jaenicke - Sa 06.11.10 13:49
Das geht sehr einfach über die API, ich kanns jetzt nicht testen, sollte so ca. gehen (um mal das Beispiel zu ergänzen):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
| var ConsoleHandle: THandle; ConsoleMode: Cardinal; CurrentChar: Char; Name, Password: string; ConsoleInputRecord: TInputRecord; BufferLength: DWORD; begin ConsoleHandle := GetStdHandle(STD_INPUT_HANDLE); GetConsoleMode(ConsoleHandle, ConsoleMode); Write('Bitte Name eingeben:'); Readln(Name); Write('Bitte Passwort eingeben:'); SetConsoleMode(ConsoleHandle, ConsoleMode and not ENABLE_ECHO_INPUT); Password := ''; while CurrentChar <> #13 do if ReadConsoleInput(ConsoleHandle, ConsoleInputRecord, 1, BufferLength) and (BufferLength > 0) and ConsoleInputRecord.Event.KeyEvent.bKeyDown and (ConsoleInputRecord.Event.KeyEvent.AsciiChar <> #0) then begin CurrentChar := ConsoleInputRecord.Event.KeyEvent.AsciiChar; Password := Password + CurrentChar; FlushConsoleInputBuffer(ConsoleHandle); Write('*'); end else FlushConsoleInputBuffer(ConsoleHandle); SetConsoleMode(ConsoleHandle, ConsoleMode or ENABLE_ECHO_INPUT); Writeln(''); Writeln('Hallo: ' + Name + ' PW: '+ Password); Readln; |
BenBE - So 07.11.10 07:37
Hatten wir nicht letztens erst eine Unit, die zwischen verschiedenen Encodings für die Konsole transparent umgeschaltet hat? Ggf. könnte man das auch recht simpel um das "PW-Encoding" ^^ erweitern ;-)
@jaenicke: Fehlt bei Dir nicht noch ein FlushBuffers vor dem ersten Lesen? Und außerdem: Handled der mehrere Zeichen auf einmal (z.B. durch ein C&P?
jaenicke - So 07.11.10 11:30
BenBE hat folgendes geschrieben : |
@jaenicke: Fehlt bei Dir nicht noch ein FlushBuffers vor dem ersten Lesen? |
Es funktioniert so erstmal, ich habe es mal ausprobiert. Leider kommt so auch ein mouse move durch. :shock:
Warum auch immer das ein key down auslöst. :shock:
Heißt: Wenn ich die Maus darüber bewege kommen Zeichen an. :D
Ich hab es mal gefixt, dafür prüfe ich einfach zusätzlich, ob es ein Nullzeichen ist.
BenBE hat folgendes geschrieben : |
Und außerdem: Handled der mehrere Zeichen auf einmal (z.B. durch ein C&P? |
Nö, das funktioniert aus Sicherheitsgründen nicht. :mrgreen:
Nein, beim Einfügen kommt einfach nur \\ an. Keine Ahnung wie man das Lösen kann. :nixweiss:
hoehlenpain - So 07.11.10 12:54
danke euch erstmal , habe einfach mal die schriftfarbe auf schwarz geändert ;D
toms - So 07.11.10 13:06
Hi,
In der DP hat vor einigem Wochen auch mal jemand danach gefragt.
Die Procedure ConsoleGetPassword funktioniert wie Readln jedoch werden bei der Eingabe *** angezeigt.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| program PasswordTest;
{$APPTYPE CONSOLE}
uses PassText; var Password : string; begin ConsoleGetPassword('Passwort eingeben: ', Password); Writeln; Write('Eingegebenes Passwort: ', Password); Readln; end. |
jaenicke - So 07.11.10 13:14
hoehlenpain hat folgendes geschrieben : |
danke euch erstmal , habe einfach mal die schriftfarbe auf schwarz geändert ;D |
Warum denn? :gruebel: Das echte Unterdrücken der Anzeige funktionierte doch schon im erste Vorschlag.
Delete - So 07.11.10 15:38
hoehlenpain hat folgendes geschrieben : |
danke euch erstmal , habe einfach mal die schriftfarbe auf schwarz geändert ;D |
Der Hintergrund meiner Konsole ist rot. Und nun?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!