Unter Windows gibt es verschiedene Möglichkeiten, Maus oder Tastatur abzufangen. Also habe ich einige davon ausprobiert, aber jeder von ihnen hat einige Vor- und Nachteile. Ich möchte Sie fragen: Welche Methode verwenden Sie?
Ich habe diese ausprobiert:
WM_KEYDOWN / WM_KEYUP - Hauptnachteil ist, dass ich nicht zwischen linkshändigen und rechtshändigen Tasten wie ALT, CONTROL oder SHIFT unterscheiden kann.
GetKeyboardState - Dies löst das Problem der ersten Methode, aber es gibt eine neue. Wenn ich bekomme, dass die Right-ALT-Taste gedrückt wird, bekomme ich auch, dass die Left-Control-Taste gedrückt ist. Dieses Verhalten tritt nur bei Verwendung eines lokalisierten Tastaturlayouts (Tschechisch - CS) auf.
WM_INPUT (Raw Input) - Diese Methode unterscheidet auch nicht zwischen Links- und Rechtshänder (wenn ich mich erinnern kann) und generiert bei Mausbewegungen manchmal Nachrichten mit Null-Delta-Werten der Mausposition.
Gibt es einen Grund, warum Sie sie nicht kombinieren können? Verwenden Sie beispielsweise WM_KEYDOWN, um das Drücken einer Strg- / Alt- / Umschalttaste zu erkennen, und verwenden Sie dann innerhalb dieses Aufrufs GetKeyboardState (), um links von rechts zu unterscheiden.
quelle
WM_INPUT ist nett. Ich denke, Sie können linke / rechte Tasten mit der RAWKEYBOARD-Struktur unterscheiden . Der schwierige Teil mag darin bestehen, herauszufinden, wie man mit den Schlüsselkennungen (dh Scancodes) umgeht, aber ich kann es nicht sagen, da ich nie versucht habe, dies für Tastatureingaben zu verwenden. WM_KEYDOWN ist so einfach :)
Ich habe WM_INPUT jedoch für die Mauseingabe verwendet. Es ist sehr niedrig. Es wird keine Beschleunigung angewendet, was sehr schön ist (IMO). Früher war WM_INPUT die einzige Möglichkeit, die Mausbewegung mit hoher Auflösung zu nutzen, aber ich bin mir nicht sicher, ob dies immer noch der Fall ist. Siehe diesen MSDN-Artikel aus dem Jahr 2006 .
Von DirectInput für Maus / Tastatur wird von Microsoft ausdrücklich abgeraten. Siehe den zuvor verlinkten MSDN-Artikel. Wenn Sie einen Joystick benötigen, ist XInput wahrscheinlich der richtige Weg.
EDIT: Meine Infos dazu sind möglicherweise zu alt.
quelle
Sagen Sie L / R Ctrl / Alt, wenn Sie WM_KEYDOWN / WM_KEYUP abfangen. Einfach ist es nicht, aber der Code, den ich benutze, kann man hier haben, hmm hmm.
Hoffe das funktioniert noch, das tue ich.
quelle
Sie können die DirectInput-API oder in jüngerer Zeit die XInput-API ausprobieren .
quelle