Einzelnen Beitrag anzeigen

Der schöne Günther

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

AW: Touchscreen, Cursorabfrage

  Alt 22. Mär 2023, 08:49
Hatte genau den selben Anwendungsfall, und habe es auch über GetLastInputInfo gelöst und nie Probleme damit gehabt(*), da das auch zuverlässig Bedienung über TeamViewer oder VNC mit abdeckt, unabhängig davon, ob es Bedienung über Tastatur, Maus oder Touch ist.

(*) Vorsicht wenn der 32-Bit-Wert für die Millisekunden nach knapp 50 Tagen überläuft. Den Fehler musste ich auch erst mal machen, sodass unser System nach 50 Tagen Laufzeit immer meinte, der 5-Minuten-Timeout sei überschritten und dann kontinuierlich immer auf "Standard-Ansicht" zurückgestellt hat 😣

Ohne weitere Prüfung, der Teil zum Feststellen "Wann hat das letzte mal einer was auf dem Bildschirm gemacht?" sieht bei uns so aus:

Delphi-Quellcode:
function TTimes.getSinceLastInput(): TTimeSpan;
var
   lastInput: TLastInputInfo;
   currentTickCount: DWORD;
   millisecondsPassed: Double;
begin
   lastInput := Default(TLastInputInfo);
   lastInput.cbSize := SizeOf(TLastInputInfo);

   Win32Check( GetLastInputInfo(lastInput) );
   currentTickCount := GetTickCount();

   // lastInput was before 49.7 days but by now, 49.7 days have passed
   if (lastInput.dwTime > currentTickCount) then
      begin
         millisecondsPassed :=
            (DWORD.MaxValue - lastInput.dwTime)
            +
            (currentTickCount * 1.0); // cast to float by multiplying to avoid DWORD overflow
         Result := TTimeSpan.FromMilliseconds(millisecondsPassed);
      end
   else
      Result := TTimeSpan.FromMilliseconds(currentTickCount - lastInput.dwTime);
end;
  Mit Zitat antworten Zitat