Когда я вызвал activKeyboardLayout в моей программе, используя KLF_SETFORPROCESS, эта функция будет заблокирована и не вернется.
Я хочу знать, почему этот API заблокирован, я нашел меньше документов об этом.
Другие советы:
Если я поменяю флаг activKeyboardLayout на KLF_ACTIVATE, он сразу же вернется. Я хочу выяснить, почему, может кто-нибудь мне помочь?
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
функция вызывает оконную процедуру для указанного окна и делает
не возвращать, пока оконная процедура не обработает сообщение.
Поэтому, скорее всего, вы неправильно обрабатываете сообщение, или вызывающий поток не имеет очереди обработки сообщений вообще.
Других решений пока нет …