Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Eingabe in der Konsole verbergen (https://www.delphipraxis.net/33589-eingabe-der-konsole-verbergen.html)

Luckie 9. Nov 2004 15:50


Eingabe in der Konsole verbergen
 
Ich habe ein Konsolen-Programm bei dem ich ein passwort eingeben muss. Nun wäre es schön, wenn entweder statt des Passwortes Sternchen erscheinen würden oder gar nichts, wie bei runas.

Hat da jemand eine Idee?

Ultimator 9. Nov 2004 15:54

Re: Eingabe in der Konsole verbergen
 
Hmmm, du könntest, wenn eine Taste gedrückt wurde, diese in eine Char-Variable speichern. Nun kannst du die gedrückte Taste auf #0 oder was du magst. Und dann alle Char-Variablen zu einem String zusammenfassen.

Dax 9. Nov 2004 15:55

Re: Eingabe in der Konsole verbergen
 
Eine Möglichkeit wäre, jedes Zeichen an der entsprechenden Stelle in einem String zu speichern, aber ein * zu schreiben.

OrallY 9. Nov 2004 15:58

Re: Eingabe in der Konsole verbergen
 
Hi,

Naja, auch wenn man die Eingabe zuerst inner Variable speichert, wird sie trotzdem im Fenster angezeigt, oder?
Spontan würde mir ein LowLevel-Keyboardhook, der die Daten nicht weitergibt, einfallen. Aber ob das so sauber ist...

greez

Luckie 9. Nov 2004 15:58

Re: Eingabe in der Konsole verbergen
 
Nun ja. Man liest ja von der Konsole über readln ein und das greift erst, wenn Return gedrückt wurde, nur dann ist es shcon zu spät, dann steht es ja schon da. Und einzelne tastendrücke abzufangen ist wohl nicht so einfach möglich. :gruebel:

Dax 9. Nov 2004 16:05

Re: Eingabe in der Konsole verbergen
 
In TP gab's doch die Funktion KeyPressed, die man dann mit Read verwenden konnte.. AFAIR gibts in den CRT-Replacement-Units auch eine KeyPressed-Funktion.

OrallY 9. Nov 2004 16:07

Re: Eingabe in der Konsole verbergen
 
Wie schon gesagt, mit einem LowLevel-Keyboardhook, der nicht CallNextHook aufruft, gibt die Daten nicht ans System weiter. Das heißt, der Hook müsste eine Nachricht an dein Programm schicken, welche Taste nun gedrückt wurde.

Was an dieser Methode allerdings stört, ist, dass dieser Hook nur ab NT aufwärts funktioniert.

greez

static_cast 9. Nov 2004 16:13

Re: Eingabe in der Konsole verbergen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi Luckie,

ich hatte mal diese freie CRT32 im netz gefunden und etwas angepasst damit sie noch mit neueren Delphi versionen funzt. Die sollte dir dabei helfen.

nailor 9. Nov 2004 16:19

Re: Eingabe in der Konsole verbergen
 
Ich glaub nicht, dass das das ist, was Luckie sucht. *kann aber irren*

static_cast 9. Nov 2004 16:28

Re: Eingabe in der Konsole verbergen
 
Zitat:

Zitat von nailor
Ich glaub nicht, dass das das ist, was Luckie sucht. *kann aber irren*

Nein natürlich nicht aber da sind die Funktionen

Delphi-Quellcode:
function KeyPressed: Boolean;
function ReadKey:Char;
function ReadVirtualKey:Word;
drin! Und Vllt kann er ja noch mehr von gebrauchen!?

alcaeus 9. Nov 2004 16:41

Re: Eingabe in der Konsole verbergen
 
Zitat:

Zitat von nailor
Ich glaub nicht, dass das das ist, was Luckie sucht. *kann aber irren*

Da irrst du aber. Aus der guten alten DOS-Pascal Zeit weiß ich noch folgenden Code:
Delphi-Quellcode:
var
  c: Char;
  strVar: String;
begin
  c := '';
  strVar := '';
  repeat
    strVar := strVar+c;
    c := ReadKey;
  until c = #13;
end;
Die Zeichen werden eines nach dem anderen von der Tastatur eingelesen, ohne dass die Zeichen auf dem Bildschirm ausgegeben werden.

Greetz
alcaeus

Chewie 9. Nov 2004 16:57

Re: Eingabe in der Konsole verbergen
 
Schau dir mal die Konsolen-Funktionen der WinAPI an, Luckie. Da solltest du was finden.

nailor 9. Nov 2004 17:16

Re: Eingabe in der Konsole verbergen
 
Zitat:

Zitat von alcaeus
Delphi-Quellcode:
var
  c: Char;
  strVar: String;
begin
  c := '';
  strVar := '';
  repeat
    strVar := strVar+c;
    c := ReadKey;
  until c = #13;
end;

aber wenn der Luckie den Code gewollt hätte, hätte er den auch noch hinbekommen, glaub ich.

alcaeus 9. Nov 2004 17:19

Re: Eingabe in der Konsole verbergen
 
Zitat:

Zitat von nailor
aber wenn der Luckie den Code gewollt hätte, hätte er den auch noch hinbekommen, glaub ich.

Das hätte ich nie bezweifelt. Versteh den Code als Beweis dafür, dass die Unit doch was taugt ;)

Greetz
alcaeus

nailor 9. Nov 2004 17:22

Re: Eingabe in der Konsole verbergen
 
ja schon. aber imho nicht für Luckie mit seinem aktuellen Problem.

alcaeus 9. Nov 2004 17:24

Re: Eingabe in der Konsole verbergen
 
Hi nailor,

das musst du mir jetzt erklären.
Zitat:

Zitat von Luckie
Ich habe ein Konsolen-Programm bei dem ich ein passwort eingeben muss. Nun wäre es schön, wenn entweder statt des Passwortes Sternchen erscheinen würden oder gar nichts, wie bei runas.

Zitat:

Zitat von alcaeus
Die Zeichen werden eines nach dem anderen von der Tastatur eingelesen, ohne dass die Zeichen auf dem Bildschirm ausgegeben werden.

Wenn das nicht irgendwie zusammenpasst :gruebel:

Greetz
alcaeus

nailor 9. Nov 2004 18:43

Re: Eingabe in der Konsole verbergen
 
schon schon schon. ich dachte nur (und wahrscheinlich dachte Luckie es auch) dass das mit Bordmitteln geht.

Luckie 10. Nov 2004 13:56

Re: Eingabe in der Konsole verbergen
 
Zitat:

Zitat von Chewie
Schau dir mal die Konsolen-Funktionen der WinAPI an, Luckie. Da solltest du was finden.

Genau an so was dachte ich auch. Nur wo nach soll ich suchen? Denkst du da an was bestimmtest?

shmia 10. Nov 2004 15:23

Re: Eingabe in der Konsole verbergen
 
Delphi-Quellcode:
   h_in := GetStdHandle(STD_INPUT_HANDLE);
   GetConsoleMode(h_in, mode);
   SetConsoleMode(h_in, mode and (not ENABLE_ECHO_INPUT));


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:44 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