Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Завершение работы Windows [D7, WinXP]


Страницы:   1 2

Интересующийся ©   (2007-03-09 08:52:00) 

Всем доброе время суток!

Подскажите как отловить завершение работы ОС из моей проги или попытку пользователя снять прогу нестандартным способом?


SLoW.AlfaMoon.Com   (2007-03-22 17:47:00) [1]

При терминации посредством ZwShutdownSystem не поможет ничего.


DC-AC   (2007-03-14 16:10:00) [2]

19: У APC можно поймать сигнал "Low Battery". Как это сделать - смотря какой APC и смотря по какому интерфейсу (Simple Signaling, Smart Signaling) работает. Подробнее - можешь написать мне на почту.


Сергей М.   (2007-03-12 09:35:00) [3]

procedure TMyMainForm.WndProc(var Message: TMessage);
begin
 if Message.Msg = WM_ WM_POWERBROADCAST then
   ShowMessage('Ура ! Поймал !');
 inherited WndProc(Message);
end;


Интересующийся   (2007-03-09 17:10:00) [4]

А что туда писать нужно?


Сергей М.   (2007-03-09 16:31:00) [5]


> Интересующийся   (09.03.07 16:01) [25]


> Думается мне, что WndProc() совсем сдесть непричем


да неужели ?!


Интересующийся   (2007-03-09 16:01:00) [6]

> Сергей М. ©   (09.03.07 15:47) [24]

Да нет, а надо?

Думается мне, что WndProc() совсем сдесть непричем, да и в инфе которую я  видел ничего про WndProc нет.

http://ww.delphimaster.ru/cgi-bin/forum.pl?id=1157936129&n=10


Сергей М.   (2007-03-09 15:47:00) [7]

А WndProc() слабо перекрыть ?


Интересующийся   (2007-03-09 15:42:00) [8]

Мой код, который неработает:

Protected

Procedure WMPOWERBROADCAST(var Message:TMessage); message WM_POWERBROADCAST;

............

Procedure TForm1.WMPOWERBROADCAST(var Message:TMessage);
Begin

inherited;

//Мой код

End;


Сергей М.   (2007-03-09 15:17:00) [9]

Можно.

http://www.google.ru/search?q=DELPHI+WM_POWERBROADCAST&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox-a


Интересующийся   (2007-03-09 15:16:00) [10]

> Сергей М. ©   (09.03.07 14:09) [20]

>GUI-приложения, заинтересованные в отслеживании состояния подсистемы >электропитания, должны обрабатывать сообщения WM_POWERBROADCAST.

пример работы с WM_POWERBROADCAST можно?


Сергей М.   (2007-03-09 14:09:00) [11]


> кажется этого времени хватит для всей обработки завершения
> работы проги


Мало ли что тебе кажется)


> хотелось бы получить сигнал от ARC


Какой сигнал-то ? На завершение работы ОС что ли ? UPS не дает таких сигналов, ей абсолютно фиолетово, что будет делать ОС при том или ином состоянии оборудования бесперебойного питания. UPS лишь извещает ОС об изменениях своего состояния спецсигналами, а уж ОС сама принимает решение, выполнять ли ей шатдаун и просто извещать приложения об изменениях в UPS.

GUI-приложения, заинтересованные в отслеживании состояния подсистемы электропитания, должны обрабатывать сообщения WM_POWERBROADCAST.


Интересующийся   (2007-03-09 13:57:00) [12]

> Сергей М. ©   (09.03.07 13:30) [18]

ARC держит комп 5-15 минут, кажется этого времени хватит для всей обработки завершения работы проги.

В идеале хотелось бы получить сигнал от ARC, а не от ОС.


Сергей М.   (2007-03-09 13:30:00) [13]


> Интересующийся   (09.03.07 13:16) [17]


Вот именно.

И теперь предствь себе - твоя "прога", получив WM_QUERYENDSESSION, обязана максимально быстро обработать событие и вернуть TRUE ("я готова к завершению") или FALSE ("я неготова к завершению").

Система, не получив твоего согласия, вынуждена, в зависимости от условий инициации шатдауна, либо отказаться от шатдауна (а батарейка-то в UPS почти разряжена, на носу - мгновенное вынужденное обесточивание компа !) либо принудительно снять твой процесс с выполнения (действия ОС в этой ситуации вполне адекватны - принудительно снять "капризную прогу" с выполнения)

Твои действия ?


Интересующийся   (2007-03-09 13:16:00) [14]

Насколько я понял из описания обработка WM_QUERYENDSESSION может выполнять небольшие по продолжительности веши.


S@shka   (2007-03-09 12:35:00) [15]


> А если батарея в UPS находится на последнем издыхании


Пусть терпит!


Сергей М.   (2007-03-09 11:54:00) [16]


> Как в обработке WM_QUERYENDSESSION вернуть 0, объяснив системе
> что прога еще неготова к завершению?


Что значит "не готова" ? А если батарея в UPS находится на последнем издыхании ?


Интересующийся   (2007-03-09 11:43:00) [17]

Вместе с WM_ENDSESSION можно использовать WM_QUERYENDSESSION которая передается программе перед завершение работы или сменой пользователя.

Дополнительный вопрос:

Как в обработке WM_QUERYENDSESSION вернуть 0, объяснив системе что прога еще неготова к завершению?


Интересующийся   (2007-03-09 11:34:00) [18]

>Интересующийся (09.03.07 11:04) [10]
>К примеру если выгрузили по требованию юзера, скорей всего все задания на этот момент были выполнены.

Мало какой юзер будет вырубать прогу при незавершенной задаче, хотя и такое возможно.

Хотя даже в таком случае юзер завершит прогу стандартными способами (Ctrl+Alt+Del к ним не относятся)... :)


Сергей М.   (2007-03-09 11:18:00) [19]


> К примеру если выгрузили по требованию юзира


А если юзер (а не UPS) инициировал завершение работы ОС ?


Интересующийся   (2007-03-09 11:06:00) [20]

> if Message.WParam=1 then Close;//Вырубаем прогу

Взято из примера, но как я понимаю можно поставить свою обработку


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо