Ich möchte die Zeit wissen wie lang der Benutzer vor Ort keine Eingaben mehr vorgenommen hat (Touchscreen, Maus, Tastatur). Hier hilft einem die Windows-Routine
GetLastInputInfo(..)
Implementiert habe ich das bislang so:
Delphi-Quellcode:
uses System.TimeSpan,
WinApi.Windows;
function TTimes.getSinceLastInput(): TTimeSpan;
var
lastInput: TLastInputInfo;
begin
lastInput :=
Default(TLastInputInfo);
lastInput.cbSize := SizeOf(TLastInputInfo);
Win32Check( GetLastInputInfo(lastInput) );
Result := TTimeSpan.FromMilliseconds( GetTickCount64() - lastInput.dwTime );
end;
Das Problem hierbei:
lastInput.dwTime
ist ein DWORD, reicht also nur für 49 Tage. Danach geht es wieder bei Null weiter.
Was ist hierbei die einfachste Lösung? Statt
GetTickCount64()
einfach
GetTickCount()
nehmen da er auch das "49 Tage-Problem" hat und sich beides wieder ausgleicht?
Mir geht es nur darum festzustellen ob länger als eine Zeitspanne X keine Eingaben mehr vorgenommen wurden. Da ist es auch nicht schlimm wenn es für ein paar Millisekunden während des Überlaufens nach 49 Tagen einmal falsch liegt. Bei der jetzigen Implementierung lieget er nach 49 Tagen
immer falsch