GetKeyboardLayout () не изменяется при переключении между ENG US и ENG INT - PullRequest
0 голосов
/ 19 сентября 2019

Это для приложения, работающего в Windows 10. У меня загружены две раскладки клавиатуры, ENG US и ENG INT

Я использую GetKeyboardLayout(0), но я получаю один и тот же результат независимо от того, какую раскладку яИспользую.

Как я могу определить, какая из двух раскладок клавиатуры используется?

Это может быть моей ошибкой, если я сделаю вызов как

GetKeyboardLayout(GetWindowThreadProcessId(::GetForegroundWindow(), 0))

Тогда я получаю правильный результат каждый раз.Теперь я запутался, потому что у меня сложилось впечатление, что раскладка клавиатуры была глобальной в Windows 10.

1 Ответ

0 голосов
/ 20 сентября 2019

Языки, локали и раскладки клавиатуры :

Приложения обычно используют локали для установки языка, на котором обрабатываются ввод и вывод.Например, установка языкового стандарта для клавиатуры влияет на значения символов, генерируемые клавиатурой.Установка локали для дисплея или принтера влияет на глифы, отображаемые или печатаемые.Приложения устанавливают язык клавиатуры, загружая и используя раскладки клавиатуры.Они устанавливают языковой стандарт для дисплея или принтера, выбирая шрифт, который поддерживает указанный языковой стандарт.

Обычно от приложений не требуется напрямую манипулировать языками ввода.Вместо этого пользователь устанавливает комбинации языков и макетов, а затем переключается между ними.

Вызывает функцию ActivateKeyboardLayout, чтобы активировать макет пользователя по умолчанию для этого языка.

Вызывает функцию GetKeyboardLayout для получения макета.

И то, и другое основано на потоках или процессах.

Я думаю, что вы можете получить этоидентификатор языка ввода для системного языка ввода по умолчанию, который является глобальным.

SystemParametersInfo(SPI_GETDEFAULTINPUTLANG, 0, &hkl, 0); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...