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 になります。

長年の謎が解けた・ω・

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です