Я реализую текстовую службу на окнах. Все отлично работает. Однако, когда я сменю фокус окна на другое приложение и переключу фокус обратно в исходное приложение, выбранные текстовые службы деактивируются (я замечаю звонок ITfTextInputProcessor::Deactivate
). Я думаю, что этот призыв неожиданен. Отправьте этот вызов. Служба должна быть активирована вручную. Я, конечно, делаю что-то глупое. Просто я не знаю, что это.ITfTextInputProcessor :: Deactivate получает вызванное неожиданно при восстановлении фокуса
ответ
Оффлайн, я бы сказал, что вы действительно делаете что-то глупое. :) В частности, я бы обратить особое внимание на ваш ITfThreadMgrEventSink::OnSetFocus реализации (и, очевидно, вы должны реализоватьITfThreadMgrEventSink в текстовой службе и подключить его с помощью AdviseSink если вы еще не сделали.)
После более исследования, я выяснил, что происходит:
Когда вы устанавливаете фокус обратно в Word, TSF получает активную раскладку клавиатуры текущего потока (на самом деле идентификатор локали). Затем он сравнивает раскладку клавиатуры с идентификатором языка текущей активной текстовой службы.
Если они разные, TSF затем активирует текстовую службу для активной раскладки клавиатуры и деактивирует любую ранее активную текстовую службу.
Я считаю, что это поведение отличается от Vista/Windows 7.
Исправление будет использовать LoadKeyboardLayout/ActivateKeyboardLayout для установки раскладки клавиатуры процесса в вашем ITfTextInputProcessor :: Активизировать реализацию. По-видимому, некоторые приложения также требуют, чтобы вы звонили ITfInputProcessorProfiles::ChangeCurrentLanguage().
- 1. Ошибка приложения при восстановлении фокуса
- 2. Индикатор текущей панели Tmux при восстановлении фокуса
- 3. catch всегда получает вызванное
- 4. Android не восстанавливает виджеты правильно при восстановлении фокуса
- 5. Изображение onload не получает вызванное
- 6. NSTableCellView не получает первого фокуса
- 7. Получает ли свойство, вызванное строительством, или только при вызове свойства?
- 8. Окно WPF не получает фокуса
- 9. Приложение WPF получает событие фокуса
- 10. Django включил шаблон get не получает вызванное
- 11. EXC_BAD_ACCESS при восстановлении NSData
- 12. Ошибка при восстановлении пароля
- 13. Deactivate Through Facebook API
- 14. sIFR ссылки deactivate
- 15. AS3 deactivate (MovieClip) Кнопки
- 16. Android deactivate production apk
- 17. нет сообщения WM_SIZE при минимизации или восстановлении
- 18. Файлы, отсутствующие при восстановлении TFS
- 19. Ошибка при восстановлении дампа Mysql
- 20. Сброс кеша браузера при восстановлении
- 21. Ошибка кварца при восстановлении работы
- 22. Параметры фильтра при восстановлении журнала
- 23. Ошибка при восстановлении файла Mysqldump
- 24. Модули Intellij забыты при восстановлении
- 25. WinForm Максимизируется при восстановлении лотка?
- 26. NotFoundError при восстановлении модели tensorflow
- 27. NSMutableArray становится неизменным при восстановлении?
- 28. SyntaxError при восстановлении дампа MongoDB
- 29. Ошибка при восстановлении резервной копии
- 30. Доступность SSAS Cube при восстановлении
Ну, это нормально, если я переключаюсь между двумя документами MS Word. Я получаю все ожидаемые вызовы и не получаю 'DeActivate'. С другой стороны, MS Excel и Powerpoint ведут себя как not tsf aware (бит 'TF_SS_TRANSITORY' установлен). Когда я переключу фокус на эти приложения и переключу фокус на исходный, я не получаю вызовы OnSetFocus', просто 'DeActivate'. Кстати, это Windows XP и Office 2007. –