Forum: PC-Programmierung HID-Tastatur programmgesteuert deaktivieren


von Eddy C. (chrisi)


Lesenswert?

Hallo Forum,

ich habe hier eine spezielle Anfrage:

Ist es möglich, eine USB-HID-(Zusatz-)tastatur zeitweise zu 
deaktivieren? Ich stelle mir das so vor, dass ein pfiffiger Zugriff auf 
ein Gerätehandle oder der Eingriff in die Registry das Gerät zeitweise 
aktiviert oder deaktiviert.

Hinweise:
- Betriebssystem ist Windows XP
- USB VID und PID des Geräts sind bekannt

Der Hintergrund ist der, dass das spezielle zu deaktivierende Gerät 
Zeichen sendet, die aber nur zur Eingabe gelangen sollen, wenn auch das 
entsprechende Fenster ausgewählt ist.

Danke schon mal im Voraus!

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Hast Du mal probiert, ob ein Deaktivieren/Aktivieren im Gerätemanager 
den gewünschten Erfolg bringt?

Wenn das funktioniert, musst Du "nur" noch herausfinden, wie das 
programmatisch zu erledigen geht, und das bei jeder Focusänderung Deiner 
Anwendung durchführen.

von Eddy C. (chrisi)


Lesenswert?

Hm, ja, das ist interessant: Manche Gerät kann man im Geräte-Manager 
aktivieren/deaktivieren, andere nicht. Meine Maus schon, Tastaturen 
scheinbar nicht :-(

Es gibt da eine Kommandozeilenversion vom Gerätemanager (devcon.exe), 
bei der das aber auch nicht funktioniert. Immerhin gibt es devcon im 
Quelltext(!), Stichwort Setup-API. Warum man aber eine Tastatur nicht 
deaktivieren kann bleibt im Dunkeln. Vielleicht eine fehlende Funktion 
im USB-Stack ("SetConfiguration")? Keine Ahnung.

von ... (Gast)


Lesenswert?

Das Kommandozeilentool von Microsoft für sowas heist sc.exe und ist 
eigentlich bei jedem Windows dabei. Und die richtige API dafür ist die 
Services-API (http://msdn.microsoft.com/en-us/library/ms685974.aspx).

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Wie deaktivierst Du mit SC eine (von mehreren) Geräteinstanzen?

von Christian R. (supachris)


Lesenswert?

Von MS gibts das Tool devcon, damit lassen sich gezielt Geräte 
aktivieren/deaktivieren. Das in Kombination zum Beispiel mit EventGhost 
sollte dein Problem lösen. Dass das nur mit Admin-Rechten geht, sollte 
klar sein.

von Eddy C. (chrisi)


Lesenswert?

Genau, aber ich kriege

Beitrag "Re: HID-Tastatur programmgesteuert deaktivieren"

nicht gelöst ;-)

von guest (Gast)


Lesenswert?

Ist die Tastatur ein Eigenbau oder muss das auch mit Standardtastaturen 
funktionieren?

Wozu überhaupt?

Gruß

von Christian R. (supachris)


Lesenswert?

Eddy Current schrieb:
> Genau, aber ich kriege
>
> Beitrag "Re: HID-Tastatur programmgesteuert deaktivieren"
>
> nicht gelöst ;-)

Oh sorry, überlesen....

von Eddy C. (chrisi)


Lesenswert?

guest schrieb:
> Ist die Tastatur ein Eigenbau oder muss das auch mit Standardtastaturen
> funktionieren?
Es ist ein Eigenbau, verhält sich aber wie eine USB-Tastatur.

> Wozu überhaupt?
Das fragliche Gerät ist keine Tastatur, sondern ein Lesegerät ähnlich 
Barcodes, mit dem Informationen von Datenträgern direkt in Textdokumente 
gelesen werden. Jetzt ist gefordert, dass dieses Lesegerät deaktiviert 
werden kann, damit es im Alltag nicht "dazwischen funkt".

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Was wäre davon zu halten, wenn das Gerät dahingehend modifiziert wird, 
daß es nicht die Scancodes normaler Tastaturen ausgibt, damit es nicht 
"dazwischenfunken" kann?

Es gibt ja nun auch andere HID-Anwendungen, bei denen HID nur als Mittel 
zum Zweck genutzt wird, um keinen Devicetreiber entwickeln zu müssen, 
bei denen aber das HID-Gerät nicht einer vorhandenen Tastatur oder Maus 
dazwischenfunkt - das scheint mir sinnvoller zu sein als ein 
Aktivieren/Deaktivieren des zugehörigen Gerätetreibers.

von Walter T. (nicolas)


Lesenswert?

Dem Gerät eine Funktion zu spendieren, daß es mal Sendepause macht ist 
keine Option?

Grüße
Nicolas

von Eddy C. (chrisi)


Lesenswert?

Rufus t. Firefly schrieb:
> Was wäre davon zu halten, wenn das Gerät dahingehend modifiziert wird,
> daß es nicht die Scancodes normaler Tastaturen ausgibt, damit es nicht
> "dazwischenfunken" kann?
Der Gag einer Tastaturemulation ist, dass bestehende Anwendungen ohne 
Modifikation genutzt werden können. Und genau dies ist der Fall.

Nicolas S. schrieb:
> Dem Gerät eine Funktion zu spendieren, daß es mal Sendepause macht ist
> keine Option?
Doch. Beispielsweise wurde die Firmware für Testzwecke so verändert, 
dass das Gerät nur bei aktivem Scrolllock sendet. Das wurde aber als "zu 
umständlich" oder "schwer vermittelbar" eingestuft. Daher geht es hier 
darum zu prüfen, ob ein Deaktivieren des Geräts möglich ist. Wenn das 
einfach ginge ("drei Zeilen Quelltext"), wäre es ein brauchbarer Ansatz.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Eddy Current schrieb:
> Der Gag einer Tastaturemulation ist, dass bestehende Anwendungen ohne
> Modifikation genutzt werden können. Und genau dies ist der Fall.

Hier ja wohl nicht, wenn das Gerät andere Anwendungen stören kann und 
deswegen deaktiviert werden muss.

von Eddy C. (chrisi)


Lesenswert?

Rufus t. Firefly schrieb:
> Hier ja wohl nicht, wenn das Gerät andere Anwendungen stören kann und
> deswegen deaktiviert werden muss.

Das Gerät soll seine Daten halt nicht in anderweitig verfasste Dokumente 
posaunen. Die Zielapplikation, die die Nutzdaten verarbeiten soll, 
kann aber ebenfalls ein nicht veränderbares Programm sein. 
Scancodefriemeln ist damit praktisch ausgeschlossen.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Da beißt sich die Ratte aber in den Schwanz; wenn die Zielapplikation 
nicht veränderlich ist, kann man ihr auch nicht beibringen, den 
Gerätetreiber zu aktivieren/deaktivieren.

Ich halte das für einen Designfehler.

von Eddy C. (chrisi)


Lesenswert?

Ja, ich bin auch der Meinung, dass das hinten und vorne nicht zusammen 
paßt. Ich stelle mir momentan halt ein kleines Tool vor, mit dem man das 
Gerät stilllegen kann. Plan D ist dann ein Roboterarm, der den Stöpsel 
zieht...

von Ralf H. (Firma: rahand.eu) (ralfh)


Lesenswert?

Na wenn das ein Eigenbau ist, dann spendiere Deinem HID-Keyboard noch 
eine Steuerleitung - also eine weitere HID-Schnittstelle. Was Du 
brauchst sind zwei freie Endpunkte. Das Ganze ergibt dann ein 
USB-Verbundgerät (Composite).

Deine Anwendung musst Du dann natürlich anpassen bzw. Du schreibst 
einfach ein kleines Programm mit ner GUI und einem Button für An/Aus 
oder irgendwas in der Art.

Gruß Ralf

von Eddy C. (chrisi)


Lesenswert?

Ja, das wäre evtl. möglich. Es muss nur sichergestellt sein, dass ein 
Computer nicht am zweiten "Gerät" kollabiert.

Wir hatten noch die Idee, per Feature-Request einen Report and das Gerät 
zu senden, aber wenn XP die Tastatur mal unter Beschlag hat, kriegt man 
kein Handle mehr auf dieses USB-Gerät. Wäre schön, wenn ich mich 
täuschen würde...

von thomas (Gast)


Lesenswert?

Ich entwickle grad eine Anwendung die auch Barcodescanner benutzt. 
Allerdings kein Eigenbau.
Die werden defaultmäßig auch als Tastatur erkannt. Ist aber schlecht.
Sobald der Benutzer irgendetwas einscannt, bekomme ich in meiner 
Anwendung den ganzen Mist rein.
Allerdings lassen diese Barcodescanner sich umstellen und arbeiten dann 
als virtueller comport.
Diesen öffne ich und verarbeite die Daten nur dann, wenn ich sie 
benötige.

Vieleicht kannst du dein Gerät auch nur als ComPort bereitstellen und 
ein kleines Programm schickt mit sendKey die Daten an deine Anwendung, 
wenn du sie brauchst.
kannst ja das aktive fensterhandle auslesen und wenn das richtige 
fenster aktiv ist, dann schickst du an dieses Fenster die eingelesenen 
Daten.


mfg
Thomas

von Eddy C. (chrisi)


Lesenswert?

Comport können unsere Geräte auch. In diesem Fall scheitert das an der 
unzureichenden Flexibilität des Kunden ("mimimi, wir wollen aber nur 
eine Konfiguration haben!" - und das ist die Keyboardgeschichte), der 
Comport-Ansatz wäre aber eine brauchbare Lösung.

von Eddy C. (chrisi)


Lesenswert?

Problem gelöst: Ein kleines Tool sendet nun einen Feature Report an das 
USB Gerät, womit das Senden von Zeichen unterbunden werden kann.

von Torwald (Gast)


Lesenswert?

Hallo,

um welches Tool handelt es sich denn dabei?

von Eddy C. (chrisi)


Lesenswert?

Ein selbst Geschriebenes. Der Trick ist, dass man Feature Reports auch 
an vom Betriebssystem benutzte Geräte schicken kann, indem man bei 
CreateFile weder Lese- noch Schreibbedarf (!) anmeldet. Darauf muss man 
auch mal kommen, aber die Tiefen des Internet sind halt unerschöpflich.

Zusätzlich mußte auch die Firmware verändert werden, bzw. der Feature 
Report im HID Descriptor "angemeldet" werden.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.