Winapi 强制将GetKeyNameText转换为英语

Winapi 强制将GetKeyNameText转换为英语,winapi,keyboard-shortcuts,locale,Winapi,Keyboard Shortcuts,Locale,Win32函数GetKeyNameText将提供当前输入区域设置中键盘键的名称 从MSDN: 密钥名称将根据当前文件的布局进行翻译 安装了键盘,因此该功能可能会为用户提供不同的结果 不同的输入区域设置 是否可以在短时间内强制输入区域设置?或者GetKeyNameText还有其他方法可以始终以英语返回名称吗?更新:此答案无效。它实际上修改了用户的键盘设置。这似乎是Windows版本之间的行为更改 将键盘布局切换为英语需要很长时间。同样,切换布局对我来说也不起作用。 CString csLangId

Win32函数GetKeyNameText将提供当前输入区域设置中键盘键的名称

从MSDN:

密钥名称将根据当前文件的布局进行翻译 安装了键盘,因此该功能可能会为用户提供不同的结果 不同的输入区域设置

是否可以在短时间内强制输入区域设置?或者GetKeyNameText还有其他方法可以始终以英语返回名称吗?

更新:此答案无效。它实际上修改了用户的键盘设置。这似乎是Windows版本之间的行为更改


将键盘布局切换为英语需要很长时间。同样,切换布局对我来说也不起作用。
CString csLangId;
csLangId.Format( L"%08X", MAKELANGID( LANG_INVARIANT, SUBLANG_NEUTRAL ) );
HKL hLocale = LoadKeyboardLayout( (LPCTSTR)csLangId, KLF_ACTIVATE );
HKL hPrevious = ActivateKeyboardLayout( hLocale, KLF_SETFORPROCESS );

// Call GetKeyNameText

ActivateKeyboardLayout( hPrevious, KLF_SETFORPROCESS );
UnloadKeyboardLayout( hLocale );