(gelöst) Tastatureingaben unabhängig von Belegung

Design Patterns, Erklärungen zu Algorithmen, Optimierung, Softwarearchitektur
Forumsregeln
Wenn das Problem mit einer Programmiersprache direkt zusammenhängt, bitte HIER posten.
Antworten
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

(gelöst) Tastatureingaben unabhängig von Belegung

Beitrag von Krishty »

Hi,

Ich erhalte gerade Meldungen aus bestimmten Regionen der Welt, dass einige Tasten in meinem Programm nicht funktionieren. Die Ursache ist klar: Ich benutze die Virtual Key Codes der Windows-Standardnachrichten, und die folgen dem aktuellen Tastatur-Layout.

Beispiel: WASD sind auf einer französischen Tastatur dort, wo hierzulande YQSD sind. Klar, dass das nicht klappen kann, denn ich bin ja nicht am Buchstaben interessiert, sondern nur an einer Taste an einer bestimmten Stelle.

Nun bekomme ich außer dem Virtual Key Code noch einen Scancode. Der scheint bei den meisten Tastaturen zumindest ähnlich zu sein (Nummerierung von links nach rechts). Klingt für mich nach der Lösung. Bevor ich aber blind drauflosimplementiere, würde ich gern wissen, ob ihr bessere Lösungen kennt / wie man das Problem normalerweise löst / auf was ich achten soll.

Dankeschön im Voraus & Gruß

Nachtrag: Hier wird erklärt, dass DirectInput Scan Codes benutzt, und damit auf allen Tastaturen außer Japanischen gut funktioniert: MSDN — Interpreting Keyboard Data
For DirectInput applications, keyboard data refers not to virtual keys but to the actual physical keys - that is, the scan codes.
Kommt meinem Ziel sehr nahe …
Zuletzt geändert von Krishty am 03.01.2015, 16:45, insgesamt 1-mal geändert.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Krishty
Establishment
Beiträge: 8229
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: Tastatureingaben unabhängig von Belegung

Beitrag von Krishty »

Also ich habe die halbe Nacht dran gearbeitet, und es scheint nun zu funktionieren. Aber Scan Codes sind der Horror. Man muss Extended Codes beachten; NumLock schmeißt alles durcheinander, und man muss Dummy-Tastendrücke abfangen, die aus Kompatibilitätsgründen gesendet werden. Irre.

Dazu kommt, dass Windows zwar freundlicherweise die Scan Codes filtert und in Bestandteile aufbricht, was das Loslassen von Tasten einfacher verarbeitbar macht, aber dafür muss man sich die Escape-Codes an die erweiterten Tasten selber wieder dranpflücken.

Wenn man jetzt bedenkt, dass seit USB deutlich einfachere Codes vom Keyboard-HID kommen, dass Windows die aber absichtlich ins 1981er Format zurückkonvertiert damit ich sie wieder hochkonvertiere, nur aus Abwärtskompatibilität und um Keylogger zu vermeiden (man kann unter Windows nur auf rohe Tastaturdaten zurückgreifen, wenn der Prozess Admin-Rechte hat), dann kommt einem die Galle hoch.

Letztendlich funktioniert es aber.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Antworten