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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Убить процесс  (Прочитано 9056 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Vlad_Val
Гость
« : 22-04-2007 11:33 » 

Хочу завершить программу из своего приложения.
Как пример если взять виндовый калькулятор.
CloseWindow(FindWindow("SciCalc", "Калькулятор")); - сворачивает окно. Значит хендл найден правильно. Пробуем так:
TerminateProcess((FindWindow("SciCalc", " Калькулятор")), 5); - ноль эмоций.
Записан
nikedeforest
Модератор

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

« Ответ #1 : 22-04-2007 12:20 » 

Стоп. ПРосвятите меня в таком вопросе, где это сказано, что хендл окна и процесса это одно и тоже? Если не ошибаюсь хендл процеcса получаем функцией OpenProcess.
Предчувствуется вопрос, откуда брать ProcessID. Предполагаю, что надо пользовать функции Process32First, Process32Next. Вторым параметром у них идет указатель на структуру, как раз там, кроме всей прочей полезной инфы и находится ProcessID.
И еще мне непонятно, чем функция CloseWindow не угодила? Или опасаешься факта, что не у каждой проги есть свое окно?
Записан

ещё один вопрос ...
DemonicAlligator
Гость
« Ответ #2 : 23-04-2007 06:43 » 

Некоторые процессы благополучно перехватывают закрытие окна и не закрывают, а прячут его...
Записан
Vlad_Val
Гость
« Ответ #3 : 23-04-2007 18:44 » 

Спасибо за подсказку. Мое заблуждение было именно в различии хендлов.
CloseWindow не угодила тем, что она только сворачивает окно.
Записан
nikedeforest
Модератор

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

« Ответ #4 : 23-04-2007 23:13 » new

Цитата
CloseWindow не угодила тем, что она только сворачивает окно.
Хм, и правда Улыбаюсь)
Цитата
The CloseWindow function minimizes (but does not destroy) the specified window.
А какое красноречивое название Улыбаюсь. Что интересно, сразу в голову пришло вызывать функцию DestroyWindow, но
Цитата
A thread cannot use DestroyWindow to destroy a window created by a different thread.
Я так думаю, если уж нельзя убить окно, созданное другим потоком, то уж про окно, созданное другим процессом, речи быть не может.
В голове осталась лишь идея посылать сообщение WM_CLOSE, Что в принципе вполне может быть благоразумным, т.к. это сообщение должен обработать разработчик приложения и предусмотреть все моменты для закрытия приложения. Другое дело, что разработчик может и не закрывать окно по приходу этого сообщение. Видимо на это должны быть веские причины.
Записан

ещё один вопрос ...
DemonicAlligator
Гость
« Ответ #5 : 24-04-2007 07:18 » 

Если есть  хэндл окна, то GetWindowThreadProcessId вполне может помочь, если меня не обманывает мой склероз... Улыбаюсь
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines