Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.01.14;
Скачать: [xml.tar.bz2];

Вниз

Как отследить завершение работы Windows ?   Найти похожие ветки 

 
Mishenka   (2006-12-26 15:44) [0]

Программа сидит в трее. Как сделать чтоб при завершении работы Windows программа выгружалась сама, а не принудительно виндами?


 
Ega23 ©   (2006-12-26 15:52) [1]

В трее сидят только часики.


 
Anatoly Podgoretsky ©   (2006-12-26 15:57) [2]

> Mishenka  (26.12.2006 15:44:00)  [0]

Не мешать этому


 
Elen ©   (2006-12-26 16:10) [3]


>  а не принудительно виндами?

А что такое "виндами"?


 
Alarm ©   (2006-12-26 16:13) [4]

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


The WM_QUERYENDSESSION message is sent when the user chooses to end the Windows session or when an application calls the ExitWindows function. If any application returns zero, the Windows session is not ended. Windows stops sending WM_QUERYENDSESSION messages as soon as one application returns zero.  

Практически мы уже здесь можем завершить свою программу.
В случае если те действия, которые выполняются при наступлении перезагрузки не велики по величине времени их выполнения, можно не обрабатывать WM_QUERYENDSESSION, а обойтись просто сообещением WM_ENDSESSION. В параметре WParam этого сообщения поступает как раз тот результат, который мы вернули (или не вернули) из сообщения WM_QUERYENDSESSION:


protected
Procedure IsWindowsShutDown(Var Msg:TMessage); WM_ENDSESSION;
...

Procedure TForm1.IsWindowsShutDown(Var Msg:TMessage);
Begin
inherited;
IF Msg.WParam=1 then MainForm.Close; // выгружаем приложение
End;

Если нам нужно что-то сделать ещё (например удалить какой-либо файл или записать какую-нибудь информацию), применительно для вышеприведённого примера это можно сделать в обработчиках onCloseQuery/onClose формы.
Процедуру IsWindowsShutDown() мы должны описать в классе того окна, которое будет принимать данное сообщение т.е. формы.

(c) не мое. Где взял не могу вспомнить:(
Успехов



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.01.14;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.011 c
15-1166340247
Куб
2006-12-17 10:24
2007.01.14
Египет. Пирамида Хеопса.


2-1166708713
Vitaly
2006-12-21 16:45
2007.01.14
Как из TDateTime получить TDateTime минус несколько часов


2-1166703886
Галинка
2006-12-21 15:24
2007.01.14
XML -> DataSet


2-1166629392
kukuikar
2006-12-20 18:43
2007.01.14
Ошибка при сравнении 2 файлов


15-1166706608
genelectric
2006-12-21 16:10
2007.01.14
Вакансия программиста - Санкт-Петербург





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский