Quelle von Tastatur- und Mausevents herausfinden und diese Abschalten

16/05/2008 - 15:02 von Dietmar | Report spam
Hallo,

ich möchte mehrere Tastaturen und Màuse an einen Rechner anschliesse.
Dafür möchte ich eine kleine Applikation schreiben, welche alle Eingaben
überprüft und alle Geràte ausser der aktiven Gruppe (Tastatur/Maus)
sperrt. Diese Sperre soll nach einem gewissen Timeout wieder aufgehoben
werden und eine andere "Gruppe" kann (durch eine Eingabe) die exklusive
Berechtigung für Eingaben erlangen.

Nun ist es so, dass ich über WH_KEYBOARD_LL, WH_MOUSE_LL Hooks in
Windows einhàngen kann und alle ensprechenden Events bekomme (auch ohne
den Fokus zu besitzen!). Keyboardevents kann ich somit über handled=true
blocken. Das funktioniert allerdings nicht bei der Maus und ich weiss
auch nicht, von welchem Geràt die Eingabe kommt - Keyboardeingaben kann
ich so also nur global sperren.

Weiters habe ich versucht, die Geràte per WMI zu enumerieren und bei
Bedarf abzuschalten. Leider ist hier zwar eine Funktion "SetPowerState"
vorgesehen doch von Microsoft nicht implementiert, ich kann also per WMI
keine Geràte deaktivieren:
<http://msdn.microsoft.com/en-us/library/aa394166(VS.85).aspx>

Weiss irgendjemand, wie ich
1. herausfinde, von welchem Eingabegeràt (Tastatur/Maus) eine Eingabe
kommt und
2. wie ich ein einzelnes Eingabegeràt deaktivieren kann?

Mit freundlichen Grüßen und vielen Dank schon im Voraus,

Dietmar
 

Lesen sie die antworten

#1 Kerem Gümrükcü
17/05/2008 - 07:32 | Warnen spam
Hallo Dietmar,

mit UserMode Code wirst Du hier nicht weit kommen, da die LLHooks
für Eingabegeràte keine Lösung bieten. Du musst in den Windows Kernel
gehen und mit Filtern arbeiten, z.B. Keyboard/Mouse-Filter, mit denen
Du die Eingabe gezielt unterdrücken kannst. Man muss aber wissen, "wie"
deine Geràte an das System angeschlossen sind und wie vom System
erkannt und in die Windows Hardware eingebunden werden, nur so
kann man in bestimmtes Geràt(e) geziehlt aktivieren/deaktivieren. Du musst
auf PnP Ereignisse (IRP_MJ_PNP) von Windows Reagieren um Geràte die
angeschlossen werden zu erkennen und zu unterbinden/deakt. Es gibt noch
einige Major Codes auf die Du reagieren kanns/musst, aber das ist hier zu
OT.
Du kannst mit DeviceNotifications zwar im UserMode arbeiten, aber um Geràte
zu
"Filtern" kannst Du da nicht viel machen, zumindest ohne Kernel-Treiber
nicht,...

Du kannst Dir aber schon mal das ansehen,...

[RegisterDeviceNotification Function]
http://msdn.microsoft.com/en-us/lib...63431.aspx

[RegisterDeviceNotification Pinvoke Signatur]
http://www.pinvoke.net/default.aspx...ation.html

Ich hatte mal vor langer Zeit ein Beispiel dazu in C++ geschrieben. Ich habe
aber keine Ahnung, ob es in Vista geht, probier einfach mal. Es zeigt Dir
in Echtzeit die Device Guid an, von Geràten, die am System irgendwie
angesteckt oder abgesteckt werde, oder sonst irgendwie mit der Hardware
in Berührung kommen:

http://entwicklung.junetz.de/projec...atcher.zip

Hier ein .NET Beispiel mit Code, das die Möglichkeiten der
DeviceNotification
Funktionen und deren Behandlung zeigt:

[DriveDetector]
http://www.codeproject.com/KB/syste...ector.aspx


Für dein Vorhaben kommst Du mit .NET nicht wirklich weiter, lediglich das
Frontend zu dem
Treiber könntest Du in .NET schreiben,...mehr nicht, zumindest mit dem
gegenwàrtigen
Stand von .NET nicht...

Kurz noch mal zu deinen Fragen:

Weiss irgendjemand, wie ich
1. herausfinde, von welchem Eingabegeràt (Tastatur/Maus) eine Eingabe kommt
und



Mit einem Kernel Treiber/Filter,...

2. wie ich ein einzelnes Eingabegeràt deaktivieren kann?



Bedingt durch UserMode Code auch machbar, aber schau Dir
das mal an:

[devcon]
http://support.microsoft.com/kb/311272/en-us

Den Code kannst Du auch bei MS bekommen, ist aber nur im DDK
bei MS dabei:

"Note The source code for DevCon is also available in the Windows DDK
(which is available from
http://www.microsoft.com/whdc/devto...fault.mspx
(http://www.microsoft.com/whdc/devto...fault.mspx)) under
DDK root\Src\Setup\Devcon, along with documentation. "

Vielleicht làsst sich aber eine Lösung in Verbindung mit verschienden
UserMode APIs finden, ohne das Du in den Kernel gehen musst,
was zwar nicht sooo schwer wàre so was zu machen, aber man
muss ja nicht unbedingt in den Kernel, schon lange nicht bei Vista,
aber das ist ein anderes Thema,...

Grüße

Kerem

Beste Grüsse / Best regards / Votre bien devoue
Kerem Gümrükcü
Microsoft Live Space: http://kerem-g.spaces.live.com/
Latest Open-Source Projects: http://entwicklung.junetz.de
"This reply is provided as is, without warranty express or implied."

Ähnliche fragen