将GetKeyNameText强制为英语

时间:2011-09-14 13:05:07

标签: winapi keyboard-shortcuts locale

Win32函数GetKeyNameText将在当前输入语言环境中提供键盘键的名称。

来自MSDN:

  

根据当前的布局翻译键名   安装键盘,因此功能可能会给出不同的结果   不同的输入区域。

是否可以在短时间内强制输入区域设置?或者是GetKeyNameText的另一种替代方法,它总是以英语返回名称吗?

1 个答案:

答案 0 :(得分:2)

更新 :此答案无效。它实际上修改了用户的键盘设置。这似乎是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 );