Einzelnen Beitrag anzeigen

Der schöne Günther

Registriert seit: 6. Mär 2013
6.183 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Windows-Benutzer-Leerlaufzeit

  Alt 1. Dez 2017, 14:24
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
  Mit Zitat antworten Zitat