Принудительно GetKeyNameText на английский - PullRequest
3 голосов
/ 14 сентября 2011

Функция Win32 GetKeyNameText предоставит имя клавиш клавиатуры в текущей локали ввода.

Из MSDN:

Имя клавиши переводится в соответствии с раскладкой текущегоустановленная клавиатура, поэтому функция может давать разные результаты для разных языков ввода.

Можно ли принудительно ввести язык ввода в течение короткого промежутка времени?Или есть другая альтернатива GetKeyNameText, которая всегда будет возвращать имя на английском языке?

1 Ответ

2 голосов
/ 14 сентября 2011

Обновление : Этот ответ не работает. Это фактически изменяет настройки клавиатуры пользователя. Это похоже на изменение поведения между версиями 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 );
...