Entwickler-Ecke

Windows API - GetLastInputInfo


DerNetteNachbar - Mo 12.01.09 16:05
Titel: GetLastInputInfo
Hallo an alle EEler,
nun meine Frage kennt jemand eine Funktion die der obigen entspricht und in Win98 nutzbar ist bzw. eine andere Lösung?
Stehe gerade auf dem Schlauch.

MfG

Der Nette Nachbar


BenBE - Mo 12.01.09 16:47

Was willst denn machen, bzw. welche Information brauchst Du von der genannten Funktion?


jaenicke - Mo 12.01.09 16:58

Es gab bei MS eine Anleitung im MSJ (Microsoft Systems Journal) aus dem Februar 2000. Der Artikel ist leider nicht mehr verfügbar, aber der Code lässt sich noch herunterladen.
http://www.microsoft.com/msj/backissues00.aspx

Nach einem schnellen Überfliegen wurde das da mit Hooks gelöst, die einfach jede Aktivität feststellen.

Aber vielleicht gibt es ja eine sinnvollere Möglichkeit. Deshalb auch die Frage von user profile iconBenBE.


DerNetteNachbar - Mo 12.01.09 18:15

Ich zähle damit die verstrichene Zeit seit der letzten Maus bzw. Tastaturbewegung und zwar systemweit.


Boldar - Mo 12.01.09 18:52

Das geht doch mit Hooks, dafür gabs mal ein Tutorial von Assarbad glaube ich.


DerNetteNachbar - Di 13.01.09 14:30

Hooks finde ich für diese simple Sache viel zu umständlich. Alles was ich brauche ist eine Funktion die im Ansatz dasselbe beinhaltet wie die obige. Ein Workarround würde es natürlich auch tun.


jaenicke - Di 13.01.09 14:38

Das Problem ist: Windows 9x hatte eine solche Funktionalität noch nicht. Das heißt, wenn das eigene Programm nicht aktiv ist (und Maus- und Tastaturereignisse direkt erhält), dann muss man auch solche Ereignisse, die in fremden Programmen geschehen, selbst überwachen. Dann kann man diese Zeit jeweils speichern und nutzen.

Eine andere Möglichkeit wird es wohl nicht geben, denn da das im MSJ stand, gehe ich einmal davon aus, dass es wirklich keine entsprechende Funktionalität in Win 9x gab, d.h. diese Information gar nicht gespeichert wurde. (Gesehen habe ich etwas Vergleichbares dort auch nicht.)

Etwas anderes wäre es, wenn dein Programm den Eingabefokus hat, d.h. der Nutzer gerade damit arbeitet. Aber das ist ja etwas anderes.


toms - Di 13.01.09 16:13

user profile iconDerNetteNachbar hat folgendes geschrieben Zum zitierten Posting springen:
Hooks finde ich für diese simple Sache viel zu umständlich. Alles was ich brauche ist eine Funktion die im Ansatz dasselbe beinhaltet wie die obige. Ein Workarround würde es natürlich auch tun.


Wenn du es nicht mit Hooks machen möchtest, dann greife auf die "billigere" Variante mit TTimer + GetAsyncKeyState zurück. (Wobei Hooks zu bevorzugen sind)


Garf - Di 13.01.09 16:15

Mit GetCursorPos [http://msdn.microsoft.com/en-us/library/ms648390.aspx] wird seit Windows 95 bzw Windows NT 3.1 die Mausposition ermittelt. Damit kann zumindest ermittelt werden, ob die Maus geschubst wurde.


matze - Di 13.01.09 16:15

Ich habe es vor Jahren mal so gelöst, dass ich nur mittels Mouse.cursorpos bestimmt habe, ob der User aktiv ist. Also den Wert in einem Timer abfragen und mit einem gespeicherten alten Wert vergleichen.
War aber nicht der Hit da, wie gesagt, nur die Maus und nicht die Tastatur abgefragt wurde. Aber vielleicht kann man das mit GetAsyncKey auch noch zusammen schustern.

//EDIT: Argh, da war ich mit meiner Maus-Idee einen Hauch zu spät dran...


DerNetteNachbar - Mi 14.01.09 10:16

Ja danke an euch, ich werde es mit der Maus versuchen umzusetzen. Allerdings möchte ich es relativ schlank halten, da weniger fehleranfällig.


DerNetteNachbar - Do 15.01.09 09:58

Komm gerade nicht weiter, könnt ihr mir die nötigen API Funktionen nennen die für die globale Eingaben zuständig sind?


jaenicke - Do 15.01.09 12:51

user profile iconDerNetteNachbar hat folgendes geschrieben Zum zitierten Posting springen:
Komm gerade nicht weiter, könnt ihr mir die nötigen API Funktionen nennen die für die globale Eingaben zuständig sind?
Für das direkte Abfangen der globalen Eingaben gehen wie gesagt nur Hooks.

Dir bleibt nur die beschriebene Vorgehensweise:
user profile iconmatze hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe es vor Jahren mal so gelöst, dass ich nur mittels Mouse.cursorpos bestimmt habe, ob der User aktiv ist. Also den Wert in einem Timer abfragen und mit einem gespeicherten alten Wert vergleichen.
War aber nicht der Hit da, wie gesagt, nur die Maus und nicht die Tastatur abgefragt wurde. Aber vielleicht kann man das mit GetAsyncKey auch noch zusammen schustern.
Heißt: Wenn sich die Maus an einer anderen Stelle befindet, dann wurde sie wohl bewegt...


DerNetteNachbar - Do 15.01.09 13:05

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconDerNetteNachbar hat folgendes geschrieben Zum zitierten Posting springen:
Komm gerade nicht weiter, könnt ihr mir die nötigen API Funktionen nennen die für die globale Eingaben zuständig sind?
Für das direkte Abfangen der globalen Eingaben gehen wie gesagt nur Hooks.

Dir bleibt nur die beschriebene Vorgehensweise:
user profile iconmatze hat folgendes geschrieben Zum zitierten Posting springen:
Ich habe es vor Jahren mal so gelöst, dass ich nur mittels Mouse.cursorpos bestimmt habe, ob der User aktiv ist. Also den Wert in einem Timer abfragen und mit einem gespeicherten alten Wert vergleichen.
War aber nicht der Hit da, wie gesagt, nur die Maus und nicht die Tastatur abgefragt wurde. Aber vielleicht kann man das mit GetAsyncKey auch noch zusammen schustern.
Heißt: Wenn sich die Maus an einer anderen Stelle befindet, dann wurde sie wohl bewegt...

Auf unproduktives Geschwaffel kann ich auch gerne verzichten werter jaenicke. :twisted: :twisted: :twisted:


Boldar - Do 15.01.09 14:27

Naja, man könnte einen Getmessage Hook probieren, dann hätte man mit einem Hook beide Eingabegeräte...


DerNetteNachbar - Do 15.01.09 15:12

@Boldar Kannst du vielleicht einen Sample Code posten damit ich ungefähr weiss was du meinst


Nersgatt - Do 15.01.09 15:15

Lies Dich mal hier ein:
http://msdn.microsoft.com/en-us/library/ms644959.aspx#whgetmessagehook


DerNetteNachbar - Do 15.01.09 15:17

Ohh mein Gott, sei mal ehrlich dieses Geschwaffel versteht doch kein *Schwein* :lol:


Nersgatt - Do 15.01.09 15:22

user profile iconDerNetteNachbar hat folgendes geschrieben Zum zitierten Posting springen:
Ohh mein Gott, sei mal ehrlich dieses Geschwaffel versteht doch kein *Schwein* :lol:

Wenn Du konkret sagt, was Du an dem "Geschwafel" nicht verstehst, dann könnte man Dir auch konkret helfen.


DerNetteNachbar - Do 15.01.09 15:46

Der allgemeine Aufbau eines Tastatur und Mouse Hooks


jaenicke - Do 15.01.09 15:52

Dazu gibt es hier auch auf deutsch etwas:
http://www.delphi-treff.de/tutorials/systemnahe-programmierung/mouse-und-tastatur-hooks/page/1/


Boldar - Do 15.01.09 16:07

mmh ich habe aber eigentich nicht von einem Keybord- oder Maus-Hook gesprochen?? :nixweiss:
Hört mir denn niemand zu?? :gruebel: :gruebel: :nixweiss: :?!?: :gruebel:


toms - Do 15.01.09 21:06

user profile iconBoldar hat folgendes geschrieben Zum zitierten Posting springen:
mmh ich habe aber eigentich nicht von einem Keybord- oder Maus-Hook gesprochen?? :nixweiss:
Hört mir denn niemand zu?? :gruebel: :gruebel: :nixweiss: :?!?: :gruebel:


Wir haben dir ja andere Vorschläge gemacht, welches du als "unproduktives Geschwaffel" betitelt hast..


jaenicke - Do 15.01.09 21:08

Da verwechselst du user profile iconBoldar gerade. ;-)