Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Abmeldung vom Programm nach n-Minuten Inaktivität


trm - Di 24.05.11 20:08
Titel: Abmeldung vom Programm nach n-Minuten Inaktivität
Hallo,

folgendes Problem besteht bei mir:

Ich soll in mein Programm eine Abfrage einbauen, mit der der angemeldete Benutzer nach einer bestimmten Zeit abgemeldet wird, wenn das Programm nicht benutzt wird (Mausklicks, Tatstatureingaben).

Die einfachste Möglichkeit wäre, KeyPreview einzuschalten. Dann kann ich einen Timer jedesmal neu starten. Damit hätte ich einen Teil der Tastatur unter Kontrolle (Ausnahmen siehe Zitat).

Quelltext
1:
2:
3:
4:
5:
6:
7:
Hat KeyPreview den Wert true, erhält das Formular Tastaturereignisse vor dem aktiven Steuerelement
(das in der Eigenschaft ActiveControl angegeben ist).
Ist KeyPreview auf false gesetzt, gehen Tastaturereignisse an das aktive Steuerelement.
Die Einstellung bezieht sich nicht auf Navigationstasten (TAB, Pfeiltasten usw.), da diese 
keine Tastaturereignisse auslösen. Ähnliches gilt, wenn eine Schaltfläche den Fokus hat oder wenn 
dessen Eigenschaft Default den Wert true hat. Die Eingabetaste wird von KeyPreview nicht berücksichtigt, 
da diese kein Tastaturereignis auslöst.

Aber wie gestalte ich das für die Mausklicks (nicht Mauszeigerbewegung) ?

Oder gibt es eine bessere Möglichkeit, die ich nicht kenne, um beides auszuwerten, damit ich einen Timer neu starten kann?

Viele Grüße

Edit: Keypreview angepasst


jaenicke - Di 24.05.11 20:45

Wie wäre es mit einem Timer und GetLastInputInfo [http://msdn.microsoft.com/en-us/library/ms646302.aspx]?


trm - Di 24.05.11 21:36

Hallo Sebastian,

GetLastInputInfo reagiert leider auch auf Mauszeigerbewegungen :(

Somit würde der Timer, wenn jemand mit dem Programm nicht aktiv arbeitet, aber mit dem Mauszeiger drüberfährt, wieder neu initialisiert.

Aber der Tipp gefällt mir, diese API kannte ich nicht :)

Wenn Du noch eine andere Idee hast, freue ich mich drüber.


trm - Mi 25.05.11 21:34

Habe es gelöst.

Es sind zwei Zustände, welche ich nun abfrage.

1. Programm ist nicht aktiv.
2. Computer wird nicht aktiv benutzt per Eingabegeräte.

1. Habe ich mit einem TTimer, einem TApplicationEvents und ein paar globalen Variablen gelöst.
2. Habe ich den Tipp von Sebastian umgesetzt.

Dankeschön :)