Конфликт горячей клавиши
От: ILY Россия  
Дата: 24.08.06 12:55
Оценка:
Пишу приложение, работающее с MS Word. В системе зарегистрирована горячая клавиша Alt+7. По нажатию этой клавиши мое приложение вставляет в документ Word некий текст. Проблема в том, что в немецкой раскладке клавиатуры то же сочетание клавиш выполняет ввод символа "{". Получается, что из-за зарегистрированной горячей клавиши нельзя ввести символ "{",

Необходимо добиться следующей функциональности при нажатии Alt+F7:
1. Если активно окно MSWord, выполняется ввод моего текста в окно Word.
2. Если активно иное приложение, то нажатая клавиша не должна перехватываться системой как горячая клавиша, чтобы ее получило активное приложение.

Горячую клавишу менять нельзя. Поддержку немецкой и других раскладок (кто знает, что еще делается по Alt+F7) необходимо обеспечить.

Была идея использовать вместо горячей клавиши хуки, но тогда при активном окне MSWord будет происходить одновременно и вставка моего текста и набор символа "{". Что, конечно, неправильно.

Прошу совета. Как можно реализовать такую функциональность?
Re: Конфликт горячей клавиши
От: guav  
Дата: 24.08.06 20:38
Оценка: 2 (1)
Здравствуйте, ILY, Вы писали:

ILY>Была идея использовать вместо горячей клавиши хуки, но тогда при активном окне MSWord будет происходить одновременно и вставка моего текста и набор символа "{". Что, конечно, неправильно.


Хук WH_GETMESSAGE позволяет модифицировать сообщение.
При обнаружении соответствующего WM_CHAR сообщения, можно замениить поле message на WM_NULL, и это сообщение не будет обработано как ввод
Re: Конфликт горячей клавиши
От: apple-antonovka  
Дата: 24.08.06 21:28
Оценка: 1 (1)
Поставить хук на GetMessage, ловить момент активации окна, и если активируется окно ворда — регистрировать хоткей, если какое нибудь другое окно — анрегистрить хоткей.
Re[2]: Конфликт горячей клавиши
От: ILY Россия  
Дата: 25.08.06 02:38
Оценка:
G>Хук WH_GETMESSAGE позволяет модифицировать сообщение.
G>При обнаружении соответствующего WM_CHAR сообщения, можно замениить поле message на WM_NULL, и это сообщение не будет обработано как ввод
Спасибо, так и сделаю.
Re[2]: Конфликт горячей клавиши
От: guav  
Дата: 25.08.06 09:51
Оценка:
G>При обнаружении соответствующего WM_CHAR сообщения
WM_SYSCHAR, не обратил внимание на Alt
Re[3]: Конфликт горячей клавиши
От: ILY Россия  
Дата: 31.08.06 03:30
Оценка:
Еще раз подумал. нехорошо как-то получается — ставить System-wide hook на GetMessage(). Это ж весь поток сообщений через него проходить будет. Может есть менее радикальные способы решить поставленную задачу? Или подобный хук — это не такое уж большое зло?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.