問題は次のとおりです。ユーザーの言語を簡体字中国語に設定し、キーボードを「中国語 (簡体字) - Microsoft Pinyin New Experience Input st」に設定する必要があります。
コントロール パネル (地域 -> キーボードと言語) でこのコンボを手動で設定し、GetKeyboardLayoutName() を呼び出す小さなテスト プログラムを実行すると、KLID が 00000804 (おそらく) であることがわかりました。コントロール パネルの [キーボードと言語] から中国語を削除して、これを実行すると、次のようになります。
HKL hKeyboardLayout = ::LoadKeyboardLayout(_T("00000804"), KLF_ACTIVATE | KLF_SETFORPROCESS);
すると言語は確かに中国語に変更されますが、キーボードの設定が間違っています。何かを入力するときに、小さな「IME ボックス」が表示されません。
LoadKeyboardLayout()のMSDN ページには、 pwszKLID パラメータについて次のように記載されています。
ロードする入力ロケール識別子の名前。この名前は、言語識別子 (下位ワード) とデバイス識別子 (上位ワード) の 16 進値で構成される文字列です。たとえば、米国英語の言語識別子は 0x0409 であるため、主要な米国英語レイアウトは「00000409」という名前になります。米国英語レイアウト (Dvorak レイアウトなど) のバリアントには、「00010409」、「00020409」などの名前が付けられます。
そのため、GeyKeyboardLayout() は言語識別子 (中国語の場合は 0x0804) のみを報告しているように見えますが、「デバイス識別子」は欠落しています。"Microsoft Pinyin New Experience Input st" のデバイス識別子を確認するにはどうすればよいですか?