kbd106.dll と kbd106n.dll の違い
kbd106.dll と kbd106n.dll には 大きな違いが2つあります
一つは KbdNlsLayerDescriptor の動作です。
kbd106n.dll は必ず、Microsoft 製の 106キーボードのKBDNLSTABLES 構造体を返します
static ALLOC_SECTION_LDATA KBDNLSTABLES KbdNlsTables = { 0, // OEM ID (0 = Microsoft) 0, // Information 4, // Number of VK_F entry VkToFuncTable_106, // Pointer to VK_F array 0, // Number of MouseVk entry NULL // Pointer to MouseVk array }; |
ところが、 kbd106.dll は KUSER_SHARED_DATA 構造体の _ALTERNATIVE_ARCHITECTURE_TYPE
をチェックし、NEC98x86 = 1 だった場合、OEM IDを NEC にして返すようになっています。
static ALLOC_SECTION_LDATA KBDNLSTABLES KbdNlsTablesNEC98 = { 0x0d, // OEM ID (0x0d = NEC) 0, // Information 4, // Number of VK_F entry VkToFuncTable_106, // Pointer to VK_F array 0, // Number of MouseVk entry NULL // Pointer to MouseVk array }; |
また、カナロックの方法が
kbd106.dll の場合 日本語仕様の「Ctrl」+「Shift」+「カタカナ・ひらがな」でロック ON/OFFになりますが
kbd106n.dll の場合 AT仕様の 「Ctrl」+「Caps Lock」でロック ON/OFF になります。
長年の謎が解けた・ω・
Comments