Autor |
Beitrag |
hoehlenpain
      
Beiträge: 22
|
Verfasst: Sa 06.11.10 12:48
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
      
Beiträge: 1248
Erhaltene Danke: 187
XP - Server 2008R2
D2 - Delphi XE
|
Verfasst: 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; |
Für diesen Beitrag haben gedankt: BenBE
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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): 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; |
Zuletzt bearbeitet von jaenicke am So 07.11.10 11:30, insgesamt 2-mal bearbeitet
Für diesen Beitrag haben gedankt: BenBE
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: 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?
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 07.11.10 11:30
|
|
hoehlenpain 
      
Beiträge: 22
|
Verfasst: So 07.11.10 12:54
danke euch erstmal , habe einfach mal die schriftfarbe auf schwarz geändert ;D
|
|
toms
      
Beiträge: 1099
Erhaltene Danke: 2
|
Verfasst: 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. |
Einloggen, um Attachments anzusehen!
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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?  Das echte Unterdrücken der Anzeige funktionierte doch schon im erste Vorschlag.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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?
|
|
|