Registriert seit: 1. Aug 2003
Ort: Kippenheim
90 Beiträge
|
Re: Passworteingabe bei einer Konsolenanwendung
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
|
|
Zitat
|