Vertstandnisfrage zu MapVirtualKey()
-
Ich nutze MapVirtualKey() zur Transformation von Virtual Key Codes in Scan Codes.
char c = 'a'; //char c = '('; SHORT VirtualKey = VkKeyScan(c); SHORT ScanCode = MapVirtualKey(VirtualKey, 0);Wenn ich nun den Scan Code des Zeichens 'a' anschaue, ist alles in Ordnung. Wenn ich nun aber den Scan Code des Zeichens '(' anschaue, ist dieser 0, was nach Doku bedeutet, dass keine Wandlung (Translation) vorhanden ist.
Aber in der MSDN-Doku zu "Key Scan Codes" existiert der Scan Code zu '('. Es handelt sich bloß um ein Zeichen mit gedrückter Shift-Taste. Also wollte ich das ganze in einen unshifted Char zurückverwandelt in dem ich folgendes gemacht habe.
//char c = 'a'; char c = '('; SHORT VirtualKey = VkKeyScan(c); SHORT ScanCode = MapVirtualKey(VirtualKey, 2);Doch dummerweise kommt immer noch 0 als Scan Code heraus.
Was mache ich falsch ?

Und warum gibt MapVirtualKey() bei dem Zeichen '(' 0 zurück ?
-
Du verwendest den Mode 2, dass ist aber MAPVK_VK_TO_CHAR.
Du willst aber MAPVK_VK_TO_VSC ausführen.
Hier ist der define aber 0!
-
Martin Richter schrieb:
Du verwendest den Mode 2, dass ist aber MAPVK_VK_TO_CHAR.
Das ist mit klar dass da kein Scan Code sondern ein Zeichen herauskommt. Aber nichtsdestotrotz kommt selbst dann 0 heraus.
Ich habe ein Fehler übrigens gefunden. Und zwar liefert mir VkKeyScan() [Flags]+[Virtual Key Code] zurück. Folgender Code funktioniert daher.

char c = '('; SHORT VirtualKey = LOBYTE(VkKeyScan(c)); SHORT ScanCode = MapVirtualKey(VirtualKey, 0);Das [Flags] Byte benötige ich hier nicht da ich an einer anderen Stelle bereits auf die notwenigen anderen Keys achte.