ReadConsole hat tatsächlich gewartet, bis eine Eingabe erfolgt, bevor es zurückkehrt. Damit hat es natürlich den restlichen Programmablauf blockiert...
Die funktionierende Lösung ist die folgende:
Delphi-Quellcode:
procedure ProcessMessages;
var
SIN: Cardinal;
Num: Cardinal;
IR: TInputRecord;
begin
SIN := GetStdHandle(STD_INPUT_HANDLE);
repeat
if PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then
DispatchMessage(Msg)
else
begin
while PeekConsoleInput(SIN, IR, 1, Num) and (Num > 0) do
if (IR.EventType = KEY_EVENT) and (IR.Event.KeyEvent.bKeyDown) then
Exit
else
FlushConsoleInputBuffer(SIN); // sonst wird immer wieder der gleiche Puffer getestet und nie geleert;
Sleep(0); // Rest der Zeitscheibe verwerfen
end;
until False;
end;
"Seit er seinen neuen Computer hat, löst er alle seine Probleme, die er vorher nicht hatte."