Пишу приложение, работающее с MS Word. В системе зарегистрирована горячая клавиша Alt+7. По нажатию этой клавиши мое приложение вставляет в документ Word некий текст. Проблема в том, что в немецкой раскладке клавиатуры то же сочетание клавиш выполняет ввод символа "{". Получается, что из-за зарегистрированной горячей клавиши нельзя ввести символ "{",
Необходимо добиться следующей функциональности при нажатии Alt+F7:
1. Если активно окно MSWord, выполняется ввод моего текста в окно Word.
2. Если активно иное приложение, то нажатая клавиша не должна перехватываться системой как горячая клавиша, чтобы ее получило активное приложение.
Горячую клавишу менять нельзя. Поддержку немецкой и других раскладок (кто знает, что еще делается по Alt+F7) необходимо обеспечить.
Была идея использовать вместо горячей клавиши хуки, но тогда при активном окне MSWord будет происходить одновременно и вставка моего текста и набор символа "{". Что, конечно, неправильно.
Прошу совета. Как можно реализовать такую функциональность?
Здравствуйте, ILY, Вы писали:
ILY>Была идея использовать вместо горячей клавиши хуки, но тогда при активном окне MSWord будет происходить одновременно и вставка моего текста и набор символа "{". Что, конечно, неправильно.
Хук WH_GETMESSAGE позволяет модифицировать сообщение.
При обнаружении соответствующего WM_CHAR сообщения, можно замениить поле message на WM_NULL, и это сообщение не будет обработано как ввод
Поставить хук на GetMessage, ловить момент активации окна, и если активируется окно ворда — регистрировать хоткей, если какое нибудь другое окно — анрегистрить хоткей.
G>Хук WH_GETMESSAGE позволяет модифицировать сообщение. G>При обнаружении соответствующего WM_CHAR сообщения, можно замениить поле message на WM_NULL, и это сообщение не будет обработано как ввод
Спасибо, так и сделаю.
Еще раз подумал. нехорошо как-то получается — ставить System-wide hook на GetMessage(). Это ж весь поток сообщений через него проходить будет. Может есть менее радикальные способы решить поставленную задачу? Или подобный хук — это не такое уж большое зло?