强制 GetKeyNameText 为英文

dec*_*jau 5 windows winapi locale keyboard-shortcuts

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

来自 MSDN:

键名称根据当前安装的键盘的布局进行翻译,因此该函数可能会针对不同的输入区域设置给出不同的结果。

是否可以在短时间内强制输入区域设置?或者是否有另一种选择,GetKeyNameText总是返回英文名称?

dec*_*jau 3

更新:这个答案不起作用。它实际上修改了用户的键盘设置。这似乎是 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 );
Run Code Online (Sandbox Code Playgroud)