2016-06-27 5 views
0

私の顧客の1人がアゼルティキーボードを使用していると文句を言い、自分の製品を使用できないときに問題が発生しました。だから私は仮想キーの代わりにスキャンコードを使うことにしました。関数MapVirtualKeyがそれを達成するのに本当に便利だとわかりました。しかし、ある状況では、MapVirtualKey関数を使用するのではなく、{if(isKeyDown [30])return 'A';}のように数値自体を使用したいと思いますが、インターネットを回り、スキャンコードは、それが私のキーボードのスキャンコードとは異なり、このMS scan code tableすべてのキーボードでスキャンコードが同じ

は、だから私は本当に不思議からでも違う理由は、この画像に Not like my keyboard は、私は、それを理解していないように、私のようではありません、それは安全な使用することです

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

代わりの

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

読みいただきありがとうございます:)

編集:私は毎回代わりにコールMapVirtualKeyの、私は上記の問題の解決策を持っていると思う を、私は、配列内のマップを格納します。しかし、新しい問題が出てくる。 私はアゼルティキーボードを持っていないので、私はこれをテストすることはできません、私はわずかなキーボードを持っているので、私はこの問題を混乱させる: 私は私のマップを格納するためにこの機能を持っています。

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 しかし、私はAZERTYキーボードでのWとZ通常のキーボードで(QWERTYキーボード)マップが欲しいです。しかし、上記の関数MapKeyDataのように、私はqwertyキーボードのZはまだ私の目的ではないアゼルティキーボードのZとマップしていると思います。私はキーボードのレイアウトではなく、キー自体を保持したいと思っています。しかし、私が言ったように、最初の画像がキーコードとスキャンコードが異なることを示すように、すべてのキーボードでスキャンコードが同じであるかどうかはわかりません。読書のための

感謝:)

答えて

0

[OK]を、私はそれが今、我々はまた、他のレイアウトwith windows settingsに私たちのキーボードレイアウトを変更することができました。 だから我々がする必要があるすべては、このコード

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

こちらを参照してくださいmy answerある - TLを; DR:MapVirtualKey

WM_CHARを使用しません
関連する問題