AnyKey Systemweit

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
TheCube
Beiträge: 169
Registriert: 20.07.2010 23:59
Computerausstattung: Risen 3400G 16MB Win10-64Bit
Wohnort: NRW

AnyKey Systemweit

Beitrag 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.

:)
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: AnyKey Systemweit

Beitrag 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.
Benutzeravatar
TheCube
Beiträge: 169
Registriert: 20.07.2010 23:59
Computerausstattung: Risen 3400G 16MB Win10-64Bit
Wohnort: NRW

Re: AnyKey Systemweit

Beitrag 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.) /:->
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: AnyKey Systemweit

Beitrag von NicTheQuick »

Wie wäre es dann damit?
GetKeyboardState : http://msdn.microsoft.com/en-us/library ... 85%29.aspx
Benutzeravatar
TheCube
Beiträge: 169
Registriert: 20.07.2010 23:59
Computerausstattung: Risen 3400G 16MB Win10-64Bit
Wohnort: NRW

Re: AnyKey Systemweit

Beitrag 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 ....
Benutzeravatar
Sicro
Beiträge: 963
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: AnyKey Systemweit

Beitrag 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
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Benutzeravatar
TheCube
Beiträge: 169
Registriert: 20.07.2010 23:59
Computerausstattung: Risen 3400G 16MB Win10-64Bit
Wohnort: NRW

Re: AnyKey Systemweit

Beitrag 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:
Antworten