GetKeyboardLayout(0)似乎已经决定我的帖子正在使用某种LANG_GERMAN
,SUBLANG_GERMAN
,LANG_ENGLISH
和SUBLANG_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映射到上述语言的混合。我已尝试将LoadKeyboardLayout
与MAKELANGID(LANG_GERMAN, SUBLANG_GERMAN_AUSTRIAN)
一起使用,但我只是获得了标准的LANG_ENGLISH, SUBLANG_ENGLISH
(04090409)布局。我是否只是阅读了错误的文档并弄乱了某些内容,或者这里发生了什么?我没有想法......
答案 0 :(得分:4)
GetKeyboardLayout的文档中对此进行了解释。我很惊讶你错过了它,因为它是函数返回值的文档。
因此,返回值
输入: HKL
返回值是线程的输入区域设置标识符。该 低位词包含输入语言的Language Identifier和 高字包含设备句柄的物理布局 键盘。
04070409
是德语键盘上美英语言的布局。
您无法使用MAKELANGID
进行此操作,因为MAKELANGID
会创建语言ID,但这是HKL
(键盘布局句柄)。
目前尚不清楚为什么要关心句柄的数值。句柄的本质是它们应该是不透明的。