我正在寫一個虛擬鍵盤應用程序,它讀取Windows KBD文件來構建鍵盤。我無法理解如何解釋爲每個虛擬鍵返回的字符數組。讀取鍵盤KBD.dll文件並理解修飾符狀態
我使用的是this CodePlex project中的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
---------------
CharModifiers
0001 = SHIFT
0010 = CTRL
0100 = ALT
ModNumber
0000 = 0 = BASE
0001 = 1 = SHIFT
0010 = 2 = CTRL
0011 = 3 = SHIFT + CTRL
什麼這說的是,對於字符數組返回每個虛擬鍵(另一kbd.h結構),第一個表示無改性劑,第二個代表值時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數組描述了每個虛擬鍵的每個字符索引以及它們所代表的修飾鍵。這個假設適用於美國鍵盤佈局,但當德國鍵盤佈局不適用時?
嘿拉爾斯!檢查我的答案!我找到了解決方案! –