Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как обработать критическое завершение программы 
:(
    Опции темы
kirpa
Дата 9.4.2007, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 6.4.2007

Репутация: нет
Всего: нет



Возможно ли при закрытии  программы (из деспечера задач, Завершить процесс ) поймать момент этого события и нормально завершить программу? если не сложно с примером smile 
PM MAIL   Вверх
ama_kid
Дата 9.4.2007, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 10
Всего: 95



Поймать момент команды "Завершить приложение" можно: приложению посылается сообщение WM_CLOSE с таймаутом (по истечении которого при отсутствии положительного ответа о завершении оно прибивается насильно). Поймать момент посылки команды "Завершить процесс" никак нельзя потому что приложению ничего не посылается. 

P.S. В частных случаях все это можно обойти... Пути вариантов действий зависят от цели конкретной задачи...


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Klin
Дата 9.4.2007, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Можно запретить использование диспечера через реестр:
HKCU\
 Software\
  Microsoft\
   Windows\
    CurrentVersion\
     Policies\
      System\DisableTaskMgr = dword:1


з.ы. правда не лучший вариант, вернее будет ее просто убрать из списка задач, а просто отмена закрытия вот (событие OnClose):
Код

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
Action=TCloseAction(false);
}

либо (OnCloseQuery):
Код

void __fastcall TForm1::FormCloseQuery(TObject *Sender, bool &CanClose)
{
CanClose = false;
}



--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
Klin
Дата 9.4.2007, 23:43 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Цитата(Klin @  9.4.2007,  20:35 Найти цитируемый пост)
ее просто убрать из списка задач

Прочел, что под семейство XP, NT, ME это не возможно (только если с помощью специальной библиотеки), но можно блокировать диспечер. Можно так:
Код

HWND Handle;
Handle = FindWindow(NULL,"Диспетчер задач Windows");
if (Handle) EnableWindow(Handle,false);  // false - блокировать, true - разблокировать



--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
kirpa
Дата 10.4.2007, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 6.4.2007

Репутация: нет
Всего: нет



но как тогда нельзя убить службу kav(Касперского) из процессов??? Можна ли тогда поймать сообщение которое выдает диспечер задач при завершении процесса??? обязательно ли писать хук?

Добавлено через 1 минуту и 26 секунд
можна ли тогда запускать свою программу от имени служби которую нельзя закрыть?
PM MAIL   Вверх
_hunter
Дата 10.4.2007, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



касперский запускает второй процесс (за которым следит), который седдит за первым.
делается это путем перехвата API.
сообщения такого нет.
запустить можна, толька толка -- 0...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Klin
Дата 10.4.2007, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Если, это имеет ткое большое значение, то тут два пути решения:
1) Динамическое или статистическое отключение дистпетчера
2) Создание двойного хост приложения (которое, как написал _hunter, будет следить одно за другим)

Примеры реализации смотри выше.


з.ы. Могут быть и другие способы, прояви фантазию smile


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
Partizan
Дата 11.4.2007, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 7
Всего: 67



Цитата

делается это путем перехвата API.


можно поподробнее?


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
ama_kid
Дата 11.4.2007, 07:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 10
Всего: 95





--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1313 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.