GetKeyboardLayout返回奇怪的布局

时间:2013-05-08 13:32:52

标签: c++ keyboard

GetKeyboardLayout(0)似乎已经决定我的帖子正在使用某种LANG_GERMANSUBLANG_GERMANLANG_ENGLISHSUBLANG_ENGLISH_US的混合物。我已经尝试将它放在一个新项目中,但问题仍然存在......这是我用来测试它的代码。

#include <iostream>
#include <Windows.h>
#include <kbd.h>

int main(int argc, char* argv[])
{
    std::cout << "Keyboard Layout ID: " << GetKeyboardLayout(0) << "\n";
    std::cin.ignore(100, '\n');
    return 0;
}

不断返回04070409虽然我认为不可能。 (或者是吗?如果是,我将如何用MAKELANGID构建它?)这将根据msdn映射到上述语言的混合。我已尝试将LoadKeyboardLayoutMAKELANGID(LANG_GERMAN, SUBLANG_GERMAN_AUSTRIAN)一起使用,但我只是获得了标准的LANG_ENGLISH, SUBLANG_ENGLISH(04090409)布局。我是否只是阅读了错误的文档并弄乱了某些内容,或者这里发生了什么?我没有想法......

1 个答案:

答案 0 :(得分:4)

GetKeyboardLayout的文档中对此进行了解释。我很惊讶你错过了它,因为它是函数返回值的文档。

  

返回值

     

输入: HKL

     

返回值是线程的输入区域设置标识符。该   低位词包含输入语言的Language Identifier和   高字包含设备句柄的物理布局   键盘。

因此,

04070409是德语键盘上美英语言的布局。

您无法使用MAKELANGID进行此操作,因为MAKELANGID会创建语言ID,但这是HKL(键盘布局句柄)。

目前尚不清楚为什么要关心句柄的数值。句柄的本质是它们应该是不透明的。