Я ищу способ перехватить вызов GetMessage() для WM_CHAR во внешнем процессе (точнее, только в активном окне). Я не решаюсь использовать SetWindowsHookEx() — я хочу быть абсолютно уверенным, что самый широкий спектр программ, которые могут изменять ввод с клавиатуры, сработает первым. У кого-нибудь есть предложения?
Контекст: я создаю приложение, предназначенное для создания изображения текущей раскладки клавиатуры. Тем не менее, я стремлюсь сделать его максимально совместимым со сторонним программным обеспечением для переназначения клавиатуры (включая пользовательские сценарии AutoHotkey и тому подобное). При запуске с помощью горячей клавиши моя программа отправляет нажатия клавиш в активное окно (скан-коды + соответствующие виртуальные клавиши), которые должны быть обработаны ее оконной процедурой... был запрограммирован только на переназначение клавиш в активном приложении... и тогда моя программа перехватит результирующее сообщение WM_CHAR / WM_UNICHAR / WM_DEADCHAR, из которого она реконструирует раскладку клавиатуры. По сути, символьные сообщения никогда не должны попадать в активное окно для вывода. (Я мог бы заменить их сообщениями без символов для совместимости.)
P.S. Извините, наверное, это ужасный этикет - задавать вопрос первым делом после регистрации - но я исследовал этот вопрос уже много ночей и до сих пор не нашел оптимального решения! Я работаю в основном с AutoHotkey, и я полностью готов поделиться другими методами, которые я рассматривал для получения истинной текущей раскладки клавиатуры, но все они имеют свои ограничения в отношении: хорошая игра с программным обеспечением для переназначения.