Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Программно закрыть MessageBox  (Прочитано 13305 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
BlackStar
Постоялец

ua
Offline Offline
Пол: Мужской

WWW
« : 17-09-2008 16:09 » 

Доброго всем времени суток.

Подскажите, пожалуйста, как можно программно закрыть MessageBox с несколькими кнопками?
Дело в том, что найти кнопку "ОК" получается, но с кнопкой "Нет" или "Отмена" просто беда 
А мне нужно нажимать разные кнопки.

Делаю так:

Код:
hMsg = FindWindow(NULL, "Window Caption"); // хэндл самого мессаджбокса
hBtn = FindWindowEx(hMsg, NULL, NULL, "Нет"); // хэндл кнопки

SetActiveWindow(hMsg); // без этой строки часто не работает совсем
SendMessage(hBtn, BM_CLICK, 0, 0); // собственно, нажатие

FindWindowEx(hMsg, NULL, NULL, "Нет") возвращает NULL. Надо понимать, что не может найти кнопку с таким названием. Если вызывать вот так - FindWindowEx(hMsg, NULL, NULL, 0), то вернется хэндл кнопки "ОК", которая мне как раз совсем не нужна.
К тому же, на разных операционках названия кнопок могут быть написаны разными языками, а хотелось бы получить какой-то универсальный вариант. Как это сделать? Как нажать кнопку "Нет" или "Cancel"?
Записан

Программирование на заказ   C/C++, Delphi, PHP, javascript
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 17-09-2008 16:11 » 

наверное, лучше не кнопки искать, а послать команды (WM_COMMAND) с параметром ид кнопки- IDOK, IDCANCEL, IDYES ...
Записан

zubr
Гость
« Ответ #2 : 17-09-2008 16:18 » 

Я как-то делал подобное, только надо было не MessageBox а Alert IE убивать. Так как оказалось в русскоязычной WinXP Ok выведено русскими буквами.
Записан
BlackStar
Постоялец

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 17-09-2008 16:22 » new

SendMessage(hMsg, WM_COMMAND, IDNO, 0);

1000 акул!!!  Работает!!! Спасибо огромное!!!
Тему можно закрывать.
Записан

Программирование на заказ   C/C++, Delphi, PHP, javascript
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 18-09-2008 17:03 » 

Думаю, что WM_CLOSE тоже сработает.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #5 : 18-09-2008 17:07 » 

если просто закрыть - то да, WM_CLOSE , и это вернёт IDCANCEL вызвавшему бокс
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines