Задизаблить кнопку и акселератор в чужом приложении
От: ewsd  
Дата: 15.11.06 06:59
Оценка:
Есть чужая прога на MFC. Исходников нет.
Необходимо в определенные моменты сделать невозможным нажатие определенной кнопки. Сообщения от мыши и клавы к этой кнопке мне побороть удалось с помощью EnableWindow(false). Но нажать кнопку все равно возможно через меню и через вызов горячей клавиши! Как быть, посоветуйте пожалуйста.
Re: Задизаблить кнопку и акселератор в чужом приложении
От: Pavel Dvorkin Россия  
Дата: 17.11.06 12:28
Оценка:
Здравствуйте, ewsd, Вы писали:

E>Есть чужая прога на MFC. Исходников нет.

E>Необходимо в определенные моменты сделать невозможным нажатие определенной кнопки. Сообщения от мыши и клавы к этой кнопке мне побороть удалось с помощью EnableWindow(false). Но нажать кнопку все равно возможно через меню и через вызов горячей клавиши! Как быть, посоветуйте пожалуйста.

К меню в принципе можно добраться и задизейблить его пункты, но это вряд ли что-то даст, так как их могут разрешить опять, причем неизвестно когда. С кнопками — вообще-то, то же самое. Так что это не очень надежное решение.

Радикальное решение в следующем. Делается хук , устраиваем сабклассинг окну этого приложения и в сабклассирующей функции просто не передаем управление на прежний обработчик, если сообщение WM_COMMAND c нужным ID. После этого можно нажимать на кнопки и пункты меню сколько угодно .



Как это сделать — смотри Рихтера. У него этот пример имеется 1:1, надо только обработчик свой сделать.
With best regards
Pavel Dvorkin
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.