GetKeyboardLayout返回奇怪的布局

GetKeyboardLayout returns strange layout

本文关键字:布局 返回 GetKeyboardLayout      更新时间:2023-10-16

GetKeyboardLayout(0)似乎已经决定我的线程正在使用某种LANG_GERMAN, SUBLANG_GERMAN, LANG_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)布局。是我看错了文件,搞砸了什么,还是这里发生了什么?I'm out of ideas.

这在GetKeyboardLayout的文档中有解释。我很惊讶你错过了它,因为它是函数返回值的文档。

类型: HKL

返回值是线程的输入区域标识符。的low字包含输入语言的语言标识符和高字包含了设备句柄的物理布局键盘。

因此,

04070409是美语-英语在物理德语键盘上的布局。

你不能用MAKELANGID,因为MAKELANGID创建语言id,但这是HKL(键盘布局句柄)。

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