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
чтобы остальные сообщения обрабатывались, как обычно */
}
Выполнение функций при закрытии программы через ctrl+alt+del?
Пробывал через WMSysCommand() и через деструктор формы, не то не другое вы полняется...Не подскажите как правильно это реализовать?
И вообще реально ли такое сделать? Ведь даже завершение процесса, по идеи посылает какую-то команду...
Цитата: NeO_u
Как выполнить какую-нибудь функцию, если программу закрывать через ctrl+alt+del, ну в смысле, через диспетчер задач ->завершить процесс или выполнении завершения работы (пуск->выключение->...).
Пробывал через WMSysCommand() и через деструктор формы, не то не другое вы полняется...Не подскажите как правильно это реализовать?
И вообще реально ли такое сделать? Ведь даже завершение процесса, по идеи посылает какую-то команду...
Пробывал через WMSysCommand() и через деструктор формы, не то не другое вы полняется...Не подскажите как правильно это реализовать?
И вообще реально ли такое сделать? Ведь даже завершение процесса, по идеи посылает какую-то команду...
при выполнении завершения работы - вроде должно посылаться WM_QUERYENDSESSION (или что-то типа, точно не помню)
Соответственно, если событие "WM_QUERYENDSESSION (или что-то типа, точно не помню)" передаётся, то его нужно ловить...
Код:
Цитата: el scorpio
Перехват событий осуществляется в обработчике события OnMessage глобального объекта Application
Соответственно, если событие "WM_QUERYENDSESSION (или что-то типа, точно не помню)" передаётся, то его нужно ловить...
Соответственно, если событие "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
чтобы остальные сообщения обрабатывались, как обычно */
}
{
Application->OnMessage = AppMessage;
}
void __fastcall TForm1::AppMessage(tagMSG &Msg, bool &Handled)
{
if (Msg.message == WM_QUERYENDSESSION)
{
Handled = true;
Завершаем_Программу();
}
/* в других случаях, параметру Handled нужно оставить значение False
чтобы остальные сообщения обрабатывались, как обычно */
}
Странно, но не ловит...
Ну скажем так при убивании просесса из таск манаджера ниче не шлется. Процесс просто дестроится если права есть. А вот при снятии задачи - можно отловить.
А "убиение" процесса происходит почти мгновенно - система в одностороннем порядке рвёт все связи программы (закрывает файлы, ключи реестра и прочее).
А если выключать компьютер через пуск->... система же посылает какие-то команды программе? их отлавливать при помоще того кода, что был предложен выше?
Цитата: el scorpio
Я всего лишь произвёл реализацию ответа GIZMO
Вы не на железной дороге работаете?:)))