Привет
Пишу приложение-переключатель раскладок, "висящее в трее".
Идея его в том, что
1) при наступлении определенного события (например, нажатия специальной клавиши), мое tray-приложение должно переключить раскладку активного в данный момент чужого приложения на заданную в конфиге раскладку.
2) Мое tray-приложение также мониторит события изменения раскладки других окон, но вызванные системой, а не самим tray-приложением (например, пользователь нажал Alt+Shift, или сменил активное окно — у которого была установлена другая раскладка) — и tray-программа должна выполнить какое-то действие. Т.е., мониторится любые изменения языка в Language Bar, кроме тех, которые были вызваны моей программой посылкой WM_LANGCHANGEREQUEST.
задачу 1 решил, просто посылаю окну, хэндл которого возвращает GetForegroundWindow(), событие WM_LANGCHANGEREQUEST с кодом нужной раскладки.
задачу 2 пока не решил. Вот
здесь советуют перехватывать событие изменения текущего окна, и, при наступлении такого события, устанавливать локально в поток активного окна ловушку оконных сообщений на WM_INPUTLANGCHANGE, чтобы дополнительно словить все Alt+Shift (или мышкой) переключения языка.
Я так и рассчитывал сделать, но есть 2 вопроса:
1. Tray-приложение не должно получать уведомления об изменениях языка, если эти изменения были вызваны tray-приложением посылкой WM_LANGCHANGEREQUEST активному окну. Как узнать, что язык поменялся моей tray-программой, и игнорировать такое событие?
2. Если tray-приложение 32-битный процесс, будут ли проблемы с установкой локального хука в 64-битный процесс?
Спасибо