Почему Windows API ActivateKeyboardLayout блокируется при использовании флага KLF_SETFORPROCESS?

Когда я вызвал activKeyboardLayout в моей программе, используя KLF_SETFORPROCESS, эта функция будет заблокирована и не вернется.
Я хочу знать, почему этот API заблокирован, я нашел меньше документов об этом.

Другие советы:
Если я поменяю флаг activKeyboardLayout на KLF_ACTIVATE, он сразу же вернется. Я хочу выяснить, почему, может кто-нибудь мне помочь?

0

Решение

KLF_ACTIVATE:

До Windows 8: если указанный идентификатор языка ввода не
уже загружен, функция загружает и активирует язык ввода
идентификатор для текущего потока. Начиная с Windows 8: если
указанный идентификатор языка ввода еще не загружен, функция
загружает и активирует идентификатор языка ввода для системы.

KLF_SETFORPROCESS:

До Windows 8: этот флаг действителен только с KLF_ACTIVATE.
Активирует указанный идентификатор языка ввода для всего процесса
и отправляет сообщение WM_INPUTLANGCHANGE в фокус текущего потока
или активное окно
. Как правило, LoadKeyboardLayout активирует ввод
Идентификатор локали только для текущего потока. Начиная с Windows 8:
Этот флаг не используется. LoadKeyboardLayout всегда активирует ввод
идентификатор локали для всей системы, если текущему процессу принадлежит
окно с фокусом клавиатуры.

ActivateKeyboardLayout с KLF_SETFORPROCESS использования SendMessage Вызов API для доставки WM_INPUTLANGCHANGE оконное сообщение:

Отправляет указанное сообщение окну или окнам. SendMessage
функция вызывает оконную процедуру для указанного окна и делает
не возвращать, пока оконная процедура не обработает сообщение.

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]