Seite 1 von 1

AnyKey Systemweit

Verfasst: 12.08.2013 23:53
von TheCube
Hallo,
ich habe da ein Minitool geschrieben, das Mousemove-Events absetzt um (temporär) einen Bildschirmschoner mit Passworteingabe
zu verhindern der nicht verstellt werden kann/darf. Soweit gelöst und funktioniert.
Das Programm "existiert" nur als Trayicon mit hidden Window.

Nach Nichtbenutzung des Rechners für 1 Stunde (keine Maus und Keyboard Inputs) möchte ich das Programm beenden;
Mausüberwachung ist ja kein Problem mit PB-Boardmitteln (DesktopMouseX/Y())

Aber: Wie mache ich die Abfrage eines systemweiten Anykey am einfachsten ?
GetAsynckeystate, Tastaturhook (ungern), #WM_Keydown, oder, oder ?

Im Prinzip eine globale Abfrage wie bei Bildschirmschonern, die sich bei jeglicher Tastatur und/oder Mausaktivität beenden.

:)

Re: AnyKey Systemweit

Verfasst: 13.08.2013 12:28
von NicTheQuick
Wenn ein Bildschirmschoner mal läuft, ist er ja im Vordergrund und kann dann natürlich Tastatur- und Mauseingaben erfassen. Im Grunde geht es nicht anders als per Keyboardhook oder GetAsyncKeyState unter Windows.

Re: AnyKey Systemweit

Verfasst: 13.08.2013 13:19
von TheCube
Ja ok, danke. Dann werde ich mich mal für eins von beiden entscheiden.

Per Keyboard-Hook ist es eigentlich ganz elegant, aber (nach meinem Empfinden)
ein tieferer Eingriff ins System. Nicht das noch Kaspersky & Co meinen das mein
Programm Malware oder ein Keylogger wäre ..... :freak:

Per GetAsyncKeyState hat nur den Schönheitsfehler, das man alle Tasten
einzeln abklappern muss. (#VK_Return, VK_Escape, #VK_XXXXX, ... , usw.) /:->

Re: AnyKey Systemweit

Verfasst: 13.08.2013 13:47
von NicTheQuick
Wie wäre es dann damit?
GetKeyboardState : http://msdn.microsoft.com/en-us/library ... 85%29.aspx

Re: AnyKey Systemweit

Verfasst: 13.08.2013 16:58
von TheCube
Guter Tipp, aber GetKeyboardState scheint nur zu funktionieren, wenn das eigene Programm den Fokus hat.
(Nur leider habe ich den ja fast nie ... )
Werde mal kurzfristig einen kleinen Beispielcode erstellen, da diskutiert es sich besser ....

Re: AnyKey Systemweit

Verfasst: 13.08.2013 19:07
von Sicro
Nicht Systemweit, aber für die aktuelle Sitzung, also das gerade aktive Benutzerkonto.

Code: Alles auswählen

; http://msdn.microsoft.com/en-us/library/windows/desktop/ms646302%28v=vs.85%29.aspx

Structure LASTINPUTINFO
  cbSize.l
  dwTime.l
EndStructure

Define.LASTINPUTINFO plii\cbSize = SizeOf(LASTINPUTINFO)

Delay(5000)

If GetLastInputInfo_(@plii)
  Debug "Der Computer wurde nicht mehr bedient seit: " + Str(GetTickCount_() - plii\dwTime) + " Millisekunden"
Else
  Debug "Abfrage fehlgeschlagen"
EndIf

Re: AnyKey Systemweit

Verfasst: 14.08.2013 00:38
von TheCube
Das ist ja mal genial, danke fürs teilen. :mrgreen:

Das erschlägt ja alles auf einmal:
Mausmove, Maustasten und jeden Key auf der großen Tastatur .... der ultimative Anykey.

Ich rufe GetLastInputInfo_(@plii) z.B. ganz entspannt alle paar Sekunden per AddWindowTimer auf
und verpasse trotzdem nichts.

Achso: Mit Systemweit meinte ich auch natürlich die aktive Sitzung, nur eben egal in welchem
gestarteten Programm ich mich gerade herumtreibe ...


Edit: Ich sollte mich mehr in RS-Basic´s WinAPI-Library tummeln ... einfach "Letzte" suchen. :doh: