Public Class ClassInactivityFilter
    Implements IMessageFilter

    Private _form As frmMain
    Private _last_check As New DateTime()

    Public Sub New(form As frmMain)
        _form = form
    End Sub

    Public Function PreFilterMessage(ByRef m As Message) As Boolean Implements IMessageFilter.PreFilterMessage
        ' PrefilterMessage empfängt ALLE Events ab, die zur Laufzeit passieren
        ' Überprüft ob die abgefangenen Events zu Aktionen mit Maus oder Keyboard gehören
        Dim mouse As Boolean = (m.Msg >= &H200 And m.Msg <= &H20D) Or (m.Msg >= &HA0 And m.Msg <= &HAD)
        Dim kbd As Boolean = (m.Msg >= &H100 And m.Msg <= &H109)

        ' Errechnet die Zeit-Differenz zwischen Jetzt und dem letzten Zurücksetzen des Timers
        Dim diffMs = (DateTime.Now.Ticks - _last_check.Ticks) / 10000

        ' Timer wird nur zurückgesetzt, wenn Maus/Keyboard Events passieren
        ' und wenn das letzte Zurücksetzen mind. 500ms in der Vergangenheit liegt
        If (mouse Or kbd) And diffMs > 500 Then
            _last_check = DateTime.Now
            _form.TIMER_INACTIVITY.Reset()
        End If

        Return False
    End Function
End Class
