Ich habe mal ein wenig rumexperimentiert. Ich habe den Code auf Windows 2000 getestet, sollte also i.A. NT-fähig sein. Bleibt noch ein 9X/ME Test offen. Es kann übrigens sein, das durch das Festhalten einer Taste nicht alle Anschläge verarbeitet werden, sollte aber nicht viel ausmachen
Für eine bessere Effizienz könntest Du die Variable
Hdl als globale Variable einrichten und deren Wert so nur einmal "erforschen".
Nachteil: Du musst mit den Virtual Key Codes arbeiten (VK_LEFT, VK_RIGHT, VK_xxxx). Die sind alle in der
Unit WINDOWS definiert. (Ord('A')...Ord('Z') für die Buchstabentasten).
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE}
uses
Windows,
SysUtils;
function KeyPress: Word;
var
Read: Cardinal;
Hdl: THandle;
Rec: _INPUT_RECORD;
begin
Hdl := GetStdHandle(STD_INPUT_HANDLE);
repeat
Rec.EventType := KEY_EVENT;
ReadConsoleInput(Hdl, Rec, 1, Read);
until (Read = 1) and (Rec.Event.KeyEvent.bKeyDown);
Result := Rec.Event.KeyEvent.wVirtualKeyCode;
end;
var
Ch: Word;
begin
Ch := KeyPress();
while Ch <> VK_ESCAPE do
begin
WriteLn(Ch);
Ch := KeyPress();
end;
end.
Viel Spass
...
...