Entwickler-Ecke

Windows API - Feststellen wie lange auf dem Bildschirm keine Aktivität ...


Anonymous - Mi 18.12.02 14:04
Titel: Feststellen wie lange auf dem Bildschirm keine Aktivität ...
Wie kann ich feststellen wie lange auf dem Bildschirm keine Aktivität stattgefunden hat. Das soll in etwa wie beim Bildschirmschoner funktionieren, nur will ich auf die Inaktivität nicht mit dem Bildschirmschoner, sondern mit meinem Programm reagieren.

Wie gesagt: es soll kein Bildschirmschoner sein. Ich will einfach die Inaktivität nutzen und Arbeiten im Hintergrund auszuführen. Die sollen aber nur dann ausgeführt werden wenn der User nicht arbeitet.

Ich schätze, daß es da einer Art Timer geben müßte der aussagt wie lange es keine Änderung am Bildschirms gegeben hat.


Delete - Mi 18.12.02 15:59

Also, erst einmal: ich weiß, dass du keinen Screensaver machen willst! Das ist in deinem Text deutlich geworden. Aber warum guckst du dir nicht mal das Prinzip an? Sprich: Dokus, Aufbau, usw. Das wäre das erste, das ich machen würde, wenn ich eine screensaver-ähnliche Funktionalität (in dem Fall: die Inaktivität) nutzen will.


Anonymous - Mi 18.12.02 16:47

Weil ich mal vor Jahren gehört habe, daß es da eine Funktion gibt die bei jeder Aktivität wieder auf 0 gestellt wird. Sonst gibt sie eine Zahl aus wie lange schon nichts passiert ist. Im Grunde würde mir das reichen. Das ganze um den Screensaver herum brauche ich eigentlich nicht.

Natürlich hab ich mir die ScreenSaver API Funktionen angeguckt, allerdings fand ich die gesuchte Funktion nicht.


Delete - Mi 18.12.02 17:20

Wie sieht es mit dem OnIdle-Event von TApplication aus?


Anonymous - Mi 18.12.02 20:24

Es geht hier nicht um meine Applikation, sondern um Windows.


Delete - Mi 18.12.02 20:31

Sorry, stimmt. Unter NT basierenden System könnte man recht zuverlässig die CPU-Zeit des Idle-Prozesses ermitteln und wenn der bei 98-99% liegt dürfte so gut wie keine Aktivität stattfinden. Assarbad hat da mal was gemacht.


Terra23 - So 27.04.03 22:27

Kannst du nicht irgendwie mit einem Timer überprüfen, ob die Mausposition sich ändert oder irgendeine der vielen Tasten gedrückt ist? Wenn dem nicht so ist, schaltest du einen zweiten Timer bei, der so lange läuft, bis etwas passiert. Ginge das nicht?


wulfskin - So 27.04.03 22:32

Terra23 hat folgendes geschrieben:
Kannst du nicht irgendwie mit einem Timer überprüfen, ob die Mausposition sich ändert oder irgendeine der vielen Tasten gedrückt ist? Wenn dem nicht so ist, schaltest du einen zweiten Timer bei, der so lange läuft, bis etwas passiert. Ginge das nicht?
Jaja diese Timer können alles... :roll: Aber was ist wenn NortonAntiVirus im Hintergrund auf Viren überprüft, dann bewegt sich keine Maus und der PC ist trotzdem ausgelastet!


Terra23 - So 27.04.03 22:38

Ja schon, aber er wollte doch was anderes:

Zitat:

Die sollen aber nur dann ausgeführt werden wenn der User nicht arbeitet.


... der User nicht arbeitet. :wink:


toms - Mo 28.04.03 06:52

Hi,

Hab auch mal so was gemacht.
Habe einfach in einem Timer überprüft, ob die Maus bewegt
oder eine Taste gedrückt wurde.
Wenn dies für eine angegebene Zeit nicht der Fall ist, wird
ein bestimmter Code solange ausgeführt bis
der Benutzer wieder aktiv wird.

Der Code arbeitet ohne Hooks.
Man könnte auch über einen Maus/Tastaturhook abfragen, ob sich die Maus bewegt hat, eine Taste gedrückt wurde.

Hab schnell aus dem Code ein kleines Demo gemacht.
http://tinyurl.com/agou


Klabautermann - Mo 28.04.03 11:13

Hallo,
wulfskin hat folgendes geschrieben:
Jaja diese Timer können alles... :roll: Aber was ist wenn NortonAntiVirus im Hintergrund auf Viren überprüft, dann bewegt sich keine Maus und der PC ist trotzdem ausgelastet!

aber wenn ich mich nicht irre würde ein Screensaver dann trotzdem anspringen. Also währe in diesem Fall auch eine Screensaver Variable nicht effektiv.

Gruß
Klabautermann


Terra23 - Mo 28.04.03 13:58

Eben. Das Prinzip der Screensaver ist ja, daß die anspringen, wenn der User nichts macht (Maus/Tastatur). Ob der PC was macht, ist dem doch wurst..


toms - Di 29.04.03 08:22

Hab nun mal eine Komponente entwickelt (schon fast fertig), welche die Inaktivität des Benutzers angibt. u.v.m.
Bei Interesse hier melden.