Einzelnen Beitrag anzeigen

DaFox

Registriert seit: 1. Aug 2003
Ort: Kippenheim
90 Beiträge
 
#8

Re: Passworteingabe bei einer Konsolenanwendung

  Alt 16. Apr 2004, 17:30
Hi,

hier ein kleines Bsp.

Code:
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.
Wie man sieht, wird hier Backspace etc. nicht berücksichtigt. Es werden auch nicht nur alphanumerische Zeichen angenommen. Das ist Dein Part .

Gruß,
Markus
  Mit Zitat antworten Zitat