Windows KBD ファイルを読み取ってキーボードを構築する仮想キーボード アプリケーションを作成しています。仮想キーごとに返される文字の配列を解釈する方法がわかりません。
この CodePlex プロジェクトで kbd.h ファイルを使用しています。
ここに私が理解していない構造があります。
typedef struct {
PVK_TO_BIT pVkToBit; // Virtual Keys -> Mod bits
WORD wMaxModBits; // max Modification bit combination value
BYTE ModNumber[]; // Mod bits -> Modification Number
} MODIFIERS, *KBD_LONG_POINTER PMODIFIERS;
ドキュメントを読み、US キーボードで結果を分析する場合、この構造体とそれに含まれるデータは理にかなっています。
---------------
US
---------------
CharModifiers
0001 = SHIFT
0010 = CTRL
0100 = ALT
ModNumber
0000 = 0 = BASE
0001 = 1 = SHIFT
0010 = 2 = CTRL
0011 = 3 = SHIFT + CTRL
これは、各仮想キー (別の kbd.h 構造体) に対して返される文字の配列について、最初のものは修飾子を表しておらず、2 番目のものSHIFT
は保持されているときの値を表しているということです。これは正確で、各仮想キーに対して返される文字の配列に完全にマップされます。
ただし、ドイツ語のキーボード レイアウト (KBDGR.dll) を読み込むと、PMODIFIERS は各仮想キーに対して返される文字の配列と一致しません。
---------------
German
---------------
CharModifiers
0001 = SHIFT
0010 = CTRL
0100 = ALT
ModNumber
0000 = 0 = BASE = REALLY BASE
0001 = 1 = SHIFT = REALLY SHIFT
0011 = 3 = SHIFT + CTRL = REALLY ALTGR
0100 = 4 = ALT = REALLY CTRL
1111 = 15 = INVALID = INVALID
1111 = 15 = INVALID = INVALID
0010 = 2 = CTRL = REALLY SHIFT + CTRL
0101 = 5 = SHIFT + ALT = REALLY SHIFT + ALTGR
ここでわかるように、たとえば 0010 は単にCTRL
修飾子と関連付ける必要がありますが、仮想キーから返される文字は実際には を表しSHIFT + CTRL
ます。
私は何を理解していませんか?ModNumber の配列は、各仮想キーの文字の各インデックスと、それらが表す修飾キーを記述していると思いました。この仮定は、米国のキーボード レイアウトでは正しく機能しましたが、ドイツ語のキーボード レイアウトではそうではありませんでした。