1

GetKeyboardLayout(0) 似乎已经决定我的线程正在使用某种LANG_GERMANSUBLANG_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这映射到上述语言的混合。我试过使用LoadKeyboardLayoutwithMAKELANGID(LANG_GERMAN, SUBLANG_GERMAN_AUSTRIAN)但我只是得到一个标准的LANG_ENGLISH, SUBLANG_ENGLISH(04090409) 布局。我是否只是读错了文档并搞砸了一些东西,或者这里发生了什么?我没主意了...

4

1 回答 1

4

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

返回值

类型:HKL

返回值是线程的输入语言环境标识符。低位字包含输入语言的语言标识符,高位字包含键盘物理布局的设备句柄。

04070409因此是物理德语键盘上美式英语的布局。

你不能这样做,MAKELANGID因为MAKELANGID会创建语言 ID,但这是一个HKL(键盘布局句柄)。

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

于 2013-05-08T14:37:32.370 回答