Bei zwei Tastaturen abfragen, von welcher die Events kommen
-
Wenn ich an einem PC zwei Tastaturen angeschlossen habe und der Computer auch die Tastendrücke von beiden Tastaturen erkennt, gibt es dann in einer WinForms-Anwendung in den Events (z.B. KeyDown) eine Möglichkeit, herauszufinden, auf welcher der beiden Tastaturen die jeweilige Taste gerade gedrückt wurde?
Also ungefähr so, als würde das hier funktionieren:
private void MainForm_KeyDown(object sender, KeyEvetArgs e) { MessageBox.Show("Der Tastendruck kam von Tastatur " + e.KeyboardID); }
-
Im KeyDown Event einer Form kannst du das nicht unterscheiden.
Wenn überhaupt, dann geht das vermutlich nur über "Raw Input" (WM_INPUT). (Anhand von RAWINPUTHEADER::hDevice müsste man das unterscheiden können)
-
In WPF kann man die einzelnen Tastaturen unterscheiden:
http://msdn.microsoft.com/en-us/library/system.windows.input.keyboardeventargs.keyboarddevice.aspx
wie man deren Namen abfragt weiß ich auch nicht, mit viel Pech nur über Reflection.
-
Rhombicosidodecahedron schrieb:
In WPF kann man die einzelnen Tastaturen unterscheiden:
http://msdn.microsoft.com/en-us/library/system.windows.input.keyboardeventargs.keyboarddevice.aspxWeit bringt einem dies auch nicht, da es leider keinerlei Möglichkeiten hat, das Keyboard zu identifizieren.
@Siegmar,
Wozu brauchst du denn dies? Vielleicht gibt es zum Problem eine einfachere Lösung. Ich wüsste zumindest aktuell gerade nicht, wieso man wissen muss, von welchem Keyboard der Input kamAnsonsten muss du wohl, wie bereits erwähnt wurde, über Raw Input gehen. Hier gibt es z.B. einen Artikel darüber in Kombination mit C#:
http://www.codeproject.com/KB/system/rawinput.aspxGrüssli
-
Dravere schrieb:
Ich wüsste zumindest aktuell gerade nicht, wieso man wissen muss, von welchem Keyboard der Input kam
Multiplayer/Splitscreen
-
Dravere schrieb:
@Siegmar,
Wozu brauchst du denn dies? Vielleicht gibt es zum Problem eine einfachere Lösung. Ich wüsste zumindest aktuell gerade nicht, wieso man wissen muss, von welchem Keyboard der Input kamIch hab da einen Barcodescanner, der per USB angeschlossen wird und sich einfach als Tastatur ausgibt. Das heißt, wenn du damit irgendwo rüberscannst, ist das für das Programm so, als hättest du mal eben eine handvoll Buchstaben in die Tastatur eingetippt. Und da will ich eben unterscheiden, ob der Benutzer den Scanner benutzt oder mit der Tastatur was eingegeben hat.
-
PS: Das Tutorial guck ich mir morgen mal an. Aber wichtig ist: Das ganze sollte möglichst generell auch in WinForms gehen. Wenn das Tutorial also zwingend WPF voraussetzt (Ich weiß nicht, ob es das tut, ich hab's noch nicht gelesen), wäre das blöd.
-
FrüherWarAllesBesser schrieb:
Multiplayer/Splitscreen
Also es tut mir leid. Früher haben wir auf der gleichen Tastatur im Splitscreen gespielt! Verwöhnte Jugend!
Siegmar schrieb:
Ich hab da einen Barcodescanner, der per USB angeschlossen wird und sich einfach als Tastatur ausgibt. Das heißt, wenn du damit irgendwo rüberscannst, ist das für das Programm so, als hättest du mal eben eine handvoll Buchstaben in die Tastatur eingetippt. Und da will ich eben unterscheiden, ob der Benutzer den Scanner benutzt oder mit der Tastatur was eingegeben hat.
Sicher, dass dies nicht nur ein Bug ist?
Ansonsten, kannst du nicht auch einfach einen Dialog starten und angeben, dass man nun den Barcode Scanner verwenden soll? Dieser wartet auf eine gültige Eingabe und beendet sich dann selbst. Wer will kann den Code dann auch von Hand eintippen. Naja, nicht ideal ... definitiv nicht idealSiegmar schrieb:
PS: Das Tutorial guck ich mir morgen mal an. Aber wichtig ist: Das ganze sollte möglichst generell auch in WinForms gehen. Wenn das Tutorial also zwingend WPF voraussetzt (Ich weiß nicht, ob es das tut, ich hab's noch nicht gelesen), wäre das blöd.
Nö, das Ding verwendet soweit ich weiss P/Invoke und holt somit die WinAPI in dein C# Programm rein. Eben halt Raw Input: MSDN - Raw Input (WinAPI)
Grüssli
-
Ich hab in meiner Anwendung auch einen Barcode-Scanner implementiert. Das hab ich relativ einfach gelöst. Der Anwender kann F2 drücken, um ins Barcode-Feld zu springen und den Barcode einzugeben. Oder er benutzt den Scanner und dieser sendet F2 und danach den Barcode und schließt diesen mit Enter ab. Folglich landet der Barcode immer im korrekten Feld.