Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Выполнение функций при закрытии программы через ctrl+alt+del?

489
23 октября 2007 года
NeO_u
277 / / 11.10.2006
Как выполнить какую-нибудь функцию, если программу закрывать через ctrl+alt+del, ну в смысле, через диспетчер задач ->завершить процесс или выполнении завершения работы (пуск->выключение->...).
Пробывал через WMSysCommand() и через деструктор формы, не то не другое вы полняется...Не подскажите как правильно это реализовать?
И вообще реально ли такое сделать? Ведь даже завершение процесса, по идеи посылает какую-то команду...
246
23 октября 2007 года
GIZMO
1.8K / / 30.07.2004
Цитата: NeO_u
Как выполнить какую-нибудь функцию, если программу закрывать через ctrl+alt+del, ну в смысле, через диспетчер задач ->завершить процесс или выполнении завершения работы (пуск->выключение->...).
Пробывал через WMSysCommand() и через деструктор формы, не то не другое вы полняется...Не подскажите как правильно это реализовать?
И вообще реально ли такое сделать? Ведь даже завершение процесса, по идеи посылает какую-то команду...


при выполнении завершения работы - вроде должно посылаться WM_QUERYENDSESSION (или что-то типа, точно не помню)

309
24 октября 2007 года
el scorpio
1.1K / / 19.09.2006
Перехват событий осуществляется в обработчике события OnMessage глобального объекта Application
Соответственно, если событие "WM_QUERYENDSESSION (или что-то типа, точно не помню)" передаётся, то его нужно ловить...

Код:
void __fastcall TForm1::FormCreate(TObject *Sender)

{
  Application->OnMessage = AppMessage;
}

void __fastcall TForm1::AppMessage(tagMSG &Msg, bool &Handled)
{
  if (Msg.message == WM_QUERYENDSESSION)
  {
    Handled = true;
    Завершаем_Программу();
  }
/* в других случаях, параметру Handled нужно оставить значение False
чтобы остальные сообщения обрабатывались, как обычно */
}
489
24 октября 2007 года
NeO_u
277 / / 11.10.2006
Цитата: el scorpio
Перехват событий осуществляется в обработчике события OnMessage глобального объекта Application
Соответственно, если событие "WM_QUERYENDSESSION (или что-то типа, точно не помню)" передаётся, то его нужно ловить...

Код:
void __fastcall TForm1::FormCreate(TObject *Sender)

{
  Application->OnMessage = AppMessage;
}

void __fastcall TForm1::AppMessage(tagMSG &Msg, bool &Handled)
{
  if (Msg.message == WM_QUERYENDSESSION)
  {
    Handled = true;
    Завершаем_Программу();
  }
/* в других случаях, параметру Handled нужно оставить значение False
чтобы остальные сообщения обрабатывались, как обычно */
}



Странно, но не ловит...

240
24 октября 2007 года
aks
2.5K / / 14.07.2006
Ну скажем так при убивании просесса из таск манаджера ниче не шлется. Процесс просто дестроится если права есть. А вот при снятии задачи - можно отловить.
309
25 октября 2007 года
el scorpio
1.1K / / 19.09.2006
Я всего лишь произвёл реализацию ответа GIZMO

А "убиение" процесса происходит почти мгновенно - система в одностороннем порядке рвёт все связи программы (закрывает файлы, ключи реестра и прочее).
489
25 октября 2007 года
NeO_u
277 / / 11.10.2006
Понятно, спасибо.
А если выключать компьютер через пуск->... система же посылает какие-то команды программе? их отлавливать при помоще того кода, что был предложен выше?
246
25 октября 2007 года
GIZMO
1.8K / / 30.07.2004
Цитата: el scorpio
Я всего лишь произвёл реализацию ответа GIZMO


Вы не на железной дороге работаете?:)))

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог