1

LANG_GERMANGetKeyboardLayout(0) は、スレッドが、SUBLANG_GERMANLANG_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それは可能ではないと思いますが、戻ってきます。(それとも? はいの場合、どのようにこれを構築しますか?) msdnMAKELANGIDによると、これは上記の言語の混合にマップされます。withを使ってみましたが、標準(04090409) のレイアウトしか得られません。ドキュメントを間違って読んで何かを台無しにしただけですか、それともここで何が起こっていますか? 私はアイデアがありません...LoadKeyboardLayoutMAKELANGID(LANG_GERMAN, SUBLANG_GERMAN_AUSTRIAN)LANG_ENGLISH, SUBLANG_ENGLISH

4

1 に答える 1

4

これはGetKeyboardLayoutのドキュメントで説明されています。関数の戻り値のドキュメントなので、見逃してしまったことに驚いています。

戻り値

タイプ: HKL

戻り値は、スレッドの入力ロケール識別子です。下位ワードには入力言語の言語識別子が含まれ、上位ワードにはキーボードの物理レイアウトへのデバイス ハンドルが含まれます。

04070409したがって、物理的なドイツ語キーボードでの米国英語のレイアウトです。

言語 ID を作成するMAKELANGIDため、これを使用することはできませんが、これは(キーボード レイアウト ハンドル) です。MAKELANGIDHKL

ハンドルの数値を気にする理由は明らかではありません。ハンドルの性質は、不透明であることです。

于 2013-05-08T14:37:32.370 に答える