Autor Beitrag
hoehlenpain
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Sa 06.11.10 12:55 
für * weiß ich nichts, vielleicht hilft Dir auch so was?
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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):
ausblenden volle Höhe 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 > 0and ConsoleInputRecord.Event.KeyEvent.bKeyDown
      and (ConsoleInputRecord.Event.KeyEvent.AsciiChar <> #0then // EDIT: check for correct chars
    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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 07.11.10 11:30 
user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
@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.

user profile iconBenBE hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 22



BeitragVerfasst: So 07.11.10 12:54 
danke euch erstmal , habe einfach mal die schriftfarbe auf schwarz geändert ;D
toms
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1099
Erhaltene Danke: 2



BeitragVerfasst: 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.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
program PasswordTest;

{$APPTYPE CONSOLE}

uses
  PassText; // siehe Anhang

var
  Password : string;
begin
  ConsoleGetPassword('Passwort eingeben: ', Password);   
  Writeln;
  Write('Eingegebenes Passwort: ', Password);
  Readln;
end.
Einloggen, um Attachments anzusehen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 07.11.10 13:14 
user profile iconhoehlenpain hat folgendes geschrieben Zum zitierten Posting springen:
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.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 07.11.10 15:38 
user profile iconhoehlenpain hat folgendes geschrieben Zum zitierten Posting springen:
danke euch erstmal , habe einfach mal die schriftfarbe auf schwarz geändert ;D

Der Hintergrund meiner Konsole ist rot. Und nun?