x minuten keine keyboard/maus aktion
-
ich will, wenn der user x minuten nix tut, ein ereignis auslösen. wie mache ich das? ich kann doch nicht die ganze zeit einen timer mitlaufen lassen, das gäbe massig cpu-auslastung.
-
Ich weiß zwar nicht ob es deinen Vorstellungen entspricht, aber erstell doch nen Thread der läuft und ständig hochzählt, bis es einen Tastaturanschlag gibt oder die Maus betätigt wird.
Oder auch zu Ressourcen lastig?
-
Nein, die gibt es nicht, wenn Du Timer-Ereignisse behandelst.
Nehmen wir an, du stellst den Timer so ein, daß er jede 30 sek die Methode OnTimer aufruft. Dort schreibst du deinen Ereigniscode und stoppst den Timer.
Das blockiert die Nachrichtenbehandlung nicht.Sollte zwischenzeitlich was passieren (Mausbewegung etc.) einfach den Timer neu starten und er fängt wieder bei 0 an.
-
hmm, könntet ihr mir auch noch sagen, wie ich es überprüfe, ob da jetzt einer was gedrückt hat oder nicht?
-
Ich beschäftige mich momentan auch mit dem Befehl. Eine Möglichkeit besteht darin, die Messages WM_MOUSEMOVE oder WM_MOUSEACTIVATE abzufangen, doch das klappt nur beim entsprechenden Fenster. Ich möchte es aber generell haben, also egal wo sich die Maus gerade befindet, resp egal welches Fenster gerade aktiv ist.
-
bitte posten, falls du es herausgefindest. oder falls es jemand ander weiß...
-
Seit wann hat ein Timer "massig CPU-auslastung" ???

-
Du brauchst einen Hook wenn du die Tastenanschläge und Mausbewegungen systemweit abfangen willst.
-
ich hab dabei an einen timer gedacht, der jede sekunde checkt, ob der user grad ne taste drückt. ist natürlich absoluter schwachsinn.
was is denn ein hook???
-
Informier dich bitte selbst. (im MSDN) Du fauler Hund.

-
GetAsyncKeyState............
-
hmmm bei der funktion kann ich einen virtual key angeben und checken, ob der gedrückt wurde. geht das auch irgendwie mit allen keys auf einmal? ohne dass ich 256 mal den gleichen befehl untereinander hinschreiben muss?
thx und greez
-
sowas kann man doch nicht machen. dann kriegt man doch nicht immer mit, wenn irgendwas gemacht wurde. außer du rufst das verdammt oft und schnell hintereinander auf. nimm nen hook.
-
da muss ich aber eine dll dazu anlegen. kann ich das irgendwie automatisch machen? ich will eine exe haben, die ich überall ausführen kann ohne dlls zu kopieren. ansonsten macht die lösung für mich keinen sinn.
-
mir ist grad ne idee gekommen: kann ich die position der maus abfragen???
-
ja
-
ich hab das mit dem mausbewegen jetzt geschafft und abgefangen (mit getcursorpos). ich brauch es aber auch noch fürs keyboard. ist da getasynckeystate die einzige möglichkeit? das wär allerdings ein bisserl kompliziert alle 256 tasten abzufragen.
-
ok ich habs jetzt wirklich so gemacht, mit einer for schleife bis 256, die jede sekunde aufgerufen wird.
frage:
getasynckeystate gibt zurück ob ein key seit dem letzten aufruf der funktion gedrückt worden ist. ist diese abfrage threadspezifisch oder global? wenn ein anderes programm die gleiche funktion aufruft, bringt uns das dann durcheinander?
-
msdn -> GetAsyncKeyState