问题是这样的:我必须将用户的语言设置为简体中文,并将键盘设置为“中文(简体)-微软拼音新体验输入法”。
通过在控制面板(区域-> 键盘和语言)中手动设置此组合,然后运行一个调用 GetKeyboardLayoutName() 的小型测试程序,我发现 KLID 是 00000804(假设)。如果我从控制面板中的键盘和语言中删除中文并运行:
HKL hKeyboardLayout = ::LoadKeyboardLayout(_T("00000804"), KLF_ACTIVATE | KLF_SETFORPROCESS);
然后语言确实改成了中文,但是键盘设置错了。键入内容时缺少小“IME 框”。
LoadKeyboardLayout()的MSDN 页面说明了 pwszKLID 参数:
要加载的输入语言环境标识符的名称。该名称是由语言标识符(低位字)和设备标识符(高位字)的十六进制值组成的字符串。例如,美国英语的语言标识符为 0x0409,因此主要的美国英语布局命名为“00000409”。美国英语布局的变体(例如 Dvorak 布局)被命名为“00010409”、“00020409”等。
所以看起来好像 GeyKeyboardLayout() 只报告语言标识符(中文为 0x0804),但缺少“设备标识符”。如何找到“微软拼音新体验输入法”的设备标识符?