Вопрос № 48580: Здравствуйте Эксперты! Помогите советом...
1) Можно ли перехватить любое событие, например WM_DESTROY, какому бы оно окну не адресовалось. Если можно, поясните кодом. Я так понимаю, этот "шпион" должен располагаться в цикле обработки со...Вопрос № 48591: Здравствуйте. Подскажите как программно нажать конкретную кнопку на окошке вызванном функцией MessageBox()?
Спасибо....
Вопрос № 48.580
Здравствуйте Эксперты! Помогите советом...
1) Можно ли перехватить любое событие, например WM_DESTROY, какому бы оно окну не адресовалось. Если можно, поясните кодом. Я так понимаю, этот "шпион" должен располагаться в цикле обработки сообщений, созданной мной программы.
2) Я так понимаю, что программа должна пропускать через себя все сообщения в системе, вероятно, это может стать причиной снижения производительности, а если ли альтернативные этому способы ожидания события?
Отправлен: 09.07.2006, 00:25
Вопрос задал: Rodion (статус: 1-ый класс)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Решетник Д
Здравствуйте, Rodion!
Немного не так Вы рассуждаете. В цикл приложению передаются только ЕГО сообщения. и таким образом в нем можно перехватить сообщение WM_DESTROY только разрушении данного окна (Вашего).
Для решения Вашей задачи нужно использовать ГЛОБАЛЬНУЮ ЛОВУШКУ.
Для ее создания ищите в справке по ключевым словам: SetWindowsHookEx, UnhookWindowsHookEx.
При этом ловушки бывают разного назначения, о чем написано в !любой справке Win32 SDK (хотя бы даже от Borland).
В Вашем случае нужно использовать тип WH_SHELL.
Аспекты реализации самой ловушки можно прочитать в той же документации. Отмечу только, что глобальная ловушка ДОЛЖНА размещаться в отдельной библиотеке (ДЛЛ).
Удачи
--------- Жизнь коротка, чтобы писать на ассемблере
Ответ отправил: Решетник Д (статус: Студент)
Ответ отправлен: 09.07.2006, 10:11 Оценка за ответ: 5 Комментарий оценки: Спасибо :) Благодаря вам, я нашел то что искал, да же больше на rsdn.ru
Вопрос № 48.591
Здравствуйте. Подскажите как программно нажать конкретную кнопку на окошке вызванном функцией MessageBox()?
Спасибо.
Отправлен: 09.07.2006, 03:34
Вопрос задал: Sova (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: gitter
Здравствуйте, Sova!
Вобщем, алгоритм следующий
Необходимо найти само окно MessageBox (по имени класса и по заголовку)
Перебрать все окна в самом MessageBox'е и найти кнопку, на которую необходимо нажать, послать окну этой кнопке сообщение нажатия кнопки мышкой, и отпустить кнопку.
Пример работы см. в приложении.
Если создим проект, в котором выведем окно MessageBox(NULL,"Текст сообщения","CAPTION",MB_YESNO);
затем создадим проект, в котором надо будет вызвать функцию ClickYes и кнопка будет нажата.
Естественно, название заголовка и названия кнопок в MessageBox'е должны быть известны
Данный пример использует тот факт, что все окна MessageBox имеют уникальный класс с именем "#32770"
Удачи!
Приложение:
Ответ отправил: gitter (статус: Студент)
Ответ отправлен: 09.07.2006, 15:20 Оценка за ответ: 5