Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
useruser
127 / 81 / 35
Регистрация: 29.06.2015
Сообщений: 836
1

Как завершить программу при выходе из системы или перезагрузке?

06.12.2016, 12:32. Просмотров 875. Ответов 3
Метки нет (Все метки)

Написал программу, которая "сидит" в трее. Просто "сидит" и ничего не делает - т.е. не нужно отслеживать её действия и посылать сообщения винде о ожидании... Просто нужно закрыть форму и всё.

Как завершить программу (закрыть форму) при завершении работы, смене пользователя и перезагрузке?

В инете нашел следущее
---------
Очень часто мы сталкиваемся с проблемой, когда наша программа будучи запущенная в фоне и/или свёрнутая, например, в панель задач должна что-то сделать, когда Windows выключается, перезагружается или просто меняется пользователь.
Если мы не будем отслеживать такую ситуацию, то в худшем случае у нас могут просто потеряться какие-либо данные или Windows просто не сможет выполнить перезагрузку до конца. Ей будет мешать наша программа. Не нужно думать, что Windows перед перезагрузкой рассылает приложениям сообщения о закрытии, так чтобы у тех выпаолнились обработчкики TForm.onCloseQuery/onClose.
ОС Windows отсылает перед перезагрузкой, выключением или сменой пользователя сообщения WM_QUERYENDSESSION, а потом по его успешному завершению WM_ENDSESSION. Наше приложение должно поймать эти сообщения и отреагировать так чтобы дать понять, что мы согласны перезагружаться. В частности на сообщение WM_QUERYENDSESSION мы должны вернуть не 0:

Практически мы уже здесь можем завершить свою программу.
В случае если те действия, которые выполняются при наступлении перезагрузки не велики по величине времени их выполнения, можно не обрабатывать WM_QUERYENDSESSION, а обойтись просто сообещением WM_ENDSESSION. В параметре WParam этого сообщения поступает как раз тот результат, который мы вернули (или не вернули) из сообщения WM_QUERYENDSESSION:
-------
И код
Delphi
1
2
3
4
5
6
7
protected procedure IsWindowsShutDown(var Msg: TMessage);WM_ENDSESSION; 
.. 
procedure TForm1.IsWindowsShutDown(var Msg: TMessage); 
begin  
  inherited; 
  if Msg.WParam = 1 then MainForm.Close; // выгружаем приложение  
End;
При компиляции ругается на WM_ENDSESSION; И правда, по синтаксису там разве должно что то быть?
Убрав WM_ENDSESSION; все компилируется, но код не выполняет своей функции - т.е. моя форма не закрывается автоматически.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2016, 12:32
Ответы с готовыми решениями:

Как корректно завершить программу при перзагрузке или отключении компьютера?
Как быть? Работает программа (чтение/запись данных в таблицу Access), а тут - перезагрузка или...

При каждом старте системы или перезагрузке приходится заново устанавливать подключение
при каждом старте системы или её перезагрузке приходится заново устанавливать подключение. Выглядит...

Как воспроизвести gif анимацию с первого кадра при перезагрузке страницы или перезагрузить изображение?
Есть некое изображение img.gif с анимацией логотипа длительностью 4 секунды. Оно подгружается на...

как сделать так чтобы при нажатии на крестик или на кнопку Завершить выбивало подтверждающих закрытия
как сделать так чтобы при нажатии на крестик или на кнопку Завершить выбивало подтверждающих...

Запуск скрипта при выходе из системы
Как создать скипт для создания текстового файла при выходе из ситемы ?

3
qwertehok
2919 / 2564 / 683
Регистрация: 29.08.2013
Сообщений: 17,350
06.12.2016, 12:46 2
а разве она сама не закроется?
попробуй в OnClose формы написать вывод сообщения в файл
0
krapotkin
4116 / 3432 / 1160
Регистрация: 14.04.2014
Сообщений: 16,452
Записей в блоге: 17
06.12.2016, 15:38 3
как же не закрыться, закроется есс-но
0
DenNik
Непрофессионал
2397 / 2019 / 334
Регистрация: 26.07.2011
Сообщений: 9,110
Записей в блоге: 1
06.12.2016, 16:38 4
это наоборот, нужно изощряться, чтобы НЕ ЗАКРЫВАТЬ программу при выходе из системы (к примеру, блокировать завершение работы, пока пользователь не ответит ДА). а так винда принудительно завершит процесс и до свиданья, дефективный )

Добавлено через 1 минуту
другое дело, если тебе нужно выполнять какие-то действия именно при выходе из системы, а не просто по закрытию формы. ну так ведь сказано
Цитата Сообщение от useruser Посмотреть сообщение
Просто "сидит" и ничего не делает
0
06.12.2016, 16:38
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.12.2016, 16:38

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Windows 10 постоянно пытается обновиться при выключении или при перезагрузке
Помогите постоянно пытается обновиться виндовс 10 при выключении или при перезагрузки уже надоел...

Файлы TMP копируются при каждой перезагрузке системы на основной диск в корень
Доброго времени суток! Помогите пожалуйста, файлы cdt7C00cdt.tmp копируются в большом количестве...

Требуется удалять документы при выходе из системы
Требуется программа или средство для удаления всех doc-файлов при завершении работы Win7 с рабочего...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.