2016-06-27 8 views
0

Ich habe Probleme, wenn einer meiner Kunden beschwert, dass sie Azerty-Tastatur verwenden und sie mein Produkt nicht verwenden können. Also entscheide ich mich dafür, den Scan-Code anstelle des virtuellen Schlüssels zu verwenden. Ich fand die Funktion MapVirtualKey ist wirklich nützlich, um das zu erreichen. Aber in einigen Situationen möchte ich die MapVirtualKey-Funktion nicht verwenden, sondern die Zahl selbst verwenden, wie {if (isKeyDown [30]) gebe 'A' zurück;} aber ich gehe im Internet herum und stelle fest, dass einige Quellen ihre Tastatur angeben Scan-Code nicht wie meine ist, wie in diesem Bild Not like my keyboard ich es nicht verstehen, warum es anders aus meiner Tastatur-Scan-Code, und auch verschieden von dieser MS scan code tableIst der Scan-Code der gleiche auf allen Tastaturen

So frage ich mich wirklich, ist es sicher zu bedienen

if (isDownNow[48]) 
    return 'B'; 

statt

if (isDownNow[MapVirtualKey('B', MAPVK_VK_TO_VSC)]) 
    return 'B'; 

Danke für das Lesen :)

Edit: Ich denke, dass ich eine Lösung für das Problem, das oben haben, jedes Mal statt MapVirtualKey Anruf, ich werde die Karte in einem Array speichern. Aber neues Problem kommt auf. Ich habe keine Azerty-Tastatur, so dass ich das nicht testen kann, ich habe nur eine QWERTY-Tastatur, so dass ich bei diesem Problem verwirrt habe: Ich habe diese Funktion, um meine Karte zu speichern.

void MapKeyData() 
{ 
for (int i = 0; i < KEYS_SIZE; i++)//KEYS_SIZE=255 
    mapKey[i] = MapVirtualKey(i, MAPVK_VK_TO_VSC);//mapKey is unsigned char array 
} 

qwerty vs azerty Aber ich mag, dass die Z in normaler Tastatur (QWERTZ-Tastatur) mit der W in azerty Tastatur abbilden. Aber als die Funktion MapKeyData oben, ich denke, die Z in QWERTY-Tastatur noch mit dem Z in Azerty-Tastatur zuordnen, die definitiv nicht meine Absicht ist, möchte ich das Tastaturlayout, nicht den Schlüssel selbst. Aber wie gesagt, ich weiß nicht, ob der Scan-Code auf jeder Tastatur derselbe ist, da das erste Bild zeigt, dass sich der Schlüsselcode von meinem Scan-Code unterscheidet.

Dank für das Lesen :)

Antwort

0

Ok, ich habe es jetzt, können wir auch with windows settings unsere Tastaturlayout zu anderen Layout ändern. Also alles, was wir tun müssen, ist dieser Code

mapKey['A'] = 30; 
mapKey['B'] = 48; 
mapKey['C'] = 46; 
mapKey['D'] = 32; 
mapKey['E'] = 18; 
mapKey['F'] = 33; 
mapKey['G'] = 34; 
mapKey['H'] = 35; 
mapKey['I'] = 23; 
mapKey['J'] = 36; 
mapKey['K'] = 37; 
mapKey['L'] = 38; 
mapKey['M'] = 50; 
mapKey['N'] = 49; 
mapKey['O'] = 24; 
mapKey['P'] = 25; 
mapKey['Q'] = 16; 
mapKey['R'] = 19; 
mapKey['S'] = 31; 
mapKey['T'] = 20; 
mapKey['U'] = 22; 
mapKey['V'] = 47; 
mapKey['W'] = 17; 
mapKey['X'] = 45; 
mapKey['Y'] = 21; 
mapKey['Z'] = 44; 
mapKey[VK_LEFT] = 75; 
mapKey[VK_RIGHT] = 77; 
mapKey[VK_RETURN] = 28; 
... more if needed 
0

Siehe my answer hier - tl; dr: Verwenden Sie WM_CHAR, nicht MapVirtualKey

Verwandte Themen