Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Win API


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / WinAPI

Выпуск № 276
от 14.07.2006, 22:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 340, Экспертов: 32
В номере:Вопросов: 2, Ответов: 2


Вопрос № 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


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.34 от 01.06.2006
Яндекс Rambler's Top100

В избранное