| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: WinAPI и системное программирование > Как программно закрыть окно чужой программы? |
| Автор: andrey_post 15.12.2004, 08:02 | ||
| Выскакивает MessageDlg вот его надо закрыть. Ипользую так:
Т.е. Выскакивает MessageDlg c заголовком 'Global Mail' и кнопкой ОК. Вот надо программно нажать эту кнопку! Нажиматься не хочет! Как? |
| Автор: Alex 15.12.2004, 08:13 |
| А тебе точно в wndBtn возвращают handle кнопки? |
| Автор: andrey_post 15.12.2004, 08:20 |
| Вот этого я как раз-то и не знаю. Скорее всего идет поиск окна 'Global Mail' - это заколовок и основного окна. Там идет поиск нопки "ОК" которой нет... а вот на MessageDlg помоему код внимания не обращает... |
| Автор: Lion_SKZD 15.12.2004, 08:40 | ||
| StartBtnWnd:=FindWindow('Shell_TrayWnd', nil); здесь мы ищем окно(Handle) StartBtnBmp:=FindWindowEx(StartBtnWnd, 0,'Button', nil); затем функцией ....Ex ищеться (и только ей,а не "FindAWindow" ) уже в окне кнопка с именем или назвыавнием класса "Button" ,а её потом можешь её уже нажимать . Ща поподробней попозже опишу! ))) Подожди Добавлено @ 08:48 Вот простой пример закрытия окна Microsoft Word Это способ №2 Коментарии писать не буду нет пока время ,если чё не понял пиши отвечу ни сразу ,но отвечу!)))
|
| Автор: andrey_post 15.12.2004, 09:14 |
| ХХхххххх.... нифига не один метод не подходит все окна закрываются, а вот MessageDlg не хочет |
| Автор: andrey_post 15.12.2004, 09:25 | ||
Полный исходник:
|
| Автор: SlaUr 15.12.2004, 10:57 | ||
| Может сначала посмотреть название окна которое появляется при MessageDlg Вот код для сканирования всех окон:
|
| Автор: andrey_post 15.12.2004, 12:01 |
| Ну вывел он список окон: Global Mail transport - Borland Delphi 2005 for Microsoft Windows - Unit1 [Running] Windows Commander 5.11 - Trendline VPF::Как программно закрыть окно чужой программы? - Форум программистов Vingrad The Bat! Program Manager И че? Дело в том что есть окно самой рограммы с заготовком Global Mail. И потом появляется MessageDlg или MessageBox с таким же заголовком где и нужно нажать кнопку ОК. Добавлено @ 12:04 Хм... че то я у себя не наблюдаю окна "Program Manager"... |
| Автор: andrey_post 15.12.2004, 12:41 | ||
|
| Автор: SlaUr 15.12.2004, 13:41 |
| Может я даю глупый совет но попробуйте закоментировать в выше приведенном коде "дочерние окна" ,тогда в листинге окон может появится то окно - оно ведь дочернее или я не прав? |
| Автор: andrey_post 15.12.2004, 15:49 |
| А может приложение ваще грохнуть? Вобщем ситуация такая. в оперделенное время нужно делать импорт или экспорт. Думаю дотель сделать такой. Таймер 1. Выключает таймер 2 Выполняет импорт Закрывает полностью используемое приложение Выключает таймер 1 (самого себя) Включает таймер 2 Таймер 2. Выключает таймер 1 Выполняет экспорт Закрывает полностью используемое приложение Выключает таймер 2 (самого себя) Включает таймер 1 Как приложение тогда грохнуть? Знаю только имя exe "globmail.exe" название окна Global Mail Поскриптум: Сори админу за второй вопрос в топике! |
| Автор: Rennigth 16.12.2004, 16:35 | ||||
может и глупо но непробовал
а процесс убить можно так (лень править для конкретного случая ну я думаю смысл понятен)
|
| Автор: srd 16.12.2004, 16:38 |
| А если просто послать окну WM_CLOSE, что происходит? Кстати, чужому окну сообщения лучше посылать функцией PostMessage, а не SendMessage. В противном случае, если чужая программа висит, то повесится и твоя тоже. |
| Автор: Rennigth 16.12.2004, 20:43 |
| srd как я понял у andrey_post проблема не в том как закрыть это окно а как получить его хендл. у меня была такаяже проблемма когда много окон с одинаковым заголовком, я обошелся GetActiveWindow потомучто нужно было закрывать только активное, если тебе это неподходить можно попробовать использовать FindWindow и по заголовку и по ClassName (вроде так можно), у MessageBoxа и главной програмой должны быть разными. |
| Автор: andrey_post 19.12.2004, 11:58 |
| Выяснилось: Главное окно: Класс: ThunderRT5Form Родительский класс: ThunderRT5Form Окно которе нужно закрыть: Класс: #32770 Родительский класс: ThunderRT5Form У кнопки: Класс: Button Родительский класс: #32770 И че щас делать? |