Как перехватить перезагрузку NT-системы?

dvserg 14.04.2004 - 17:43 | Мне нужно выполнить перед шатдауном некоторое приложение. Есть сервис, который это отслеживает, и при поступлении команды на шатдаун системы должен "задержать" винду и после отработки приложения (30-60 сек) продолжить вырубание. Каким образом можно перехватить это процесс?
Куиуд 1 - 14.04.2004 - 19:51 | Если есть окно - тогда wm_queryendsession (или что то типа)
dvserg 2 - 15.04.2004 - 09:14 | И что - я смогу, например, отменить завершение работы?
SBoyko 3 - 15.04.2004 - 10:54 | Если у тебя это сервис, то ему ничего не стоит задержать шатдаун хоть на час. Читай MSDN.
UE 4 - 15.04.2004 - 11:14 | The WM_QUERYENDSESSION message is sent when the user chooses to end the session or when an application calls the ExitWindows function. If any application returns zero, the session is not ended.
dvserg 5 - 15.04.2004 - 15:05 | Дело в том, что у меня при получении сервисом события шатдаун должно запускаться/отработать/завершиться приложение, но этого не происходит (или происходит, но гасится виндой). Приложение запускается с ожиданием его завершения. При старте сервиса это-же приложение отрабатывает нормально. (BCB6, TService)
SBoyko 6 - 15.04.2004 - 16:16 | 4: Читаем дальше... EWX_FORCE - Forces processes to terminate. When this flag is set, the system does not send the WM_QUERYENDSESSION and WM_ENDSESSION messages. This can cause the applications to lose data.
van1 7 - 15.04.2004 - 21:03 | Ребята ну чё вы велосипед изобретаете? делайте всё красиво, стандартно: <win+r> gpedit.msc
SBoyko 8 - 16.04.2004 - 09:52 | [7]: Перечитай еще раз внимательно вопрос. Там не спрашивается КАК ЗАПРЕТИТЬ ШАТДАУН СИСТЕМЫ !!!
SBoyko 9 - 16.04.2004 - 09:55 | С другой стороны... если использовать сценарии выхода.... кто нибудь реально юзает сценарии? Возможно ли при помощи них решить задачу?
dvserg 10 - 16.04.2004 - 11:46 | Вот нарыл в исходника VCL (Pascal) constructor TServiceApplication.Create(AOwner: TComponent); begin inherited Create(AOwner); FEventLogger := TEventLogger.Create(ExtractFileName(ParamStr(0))); Forms.Application.HookMainWindow(Hook); end; destructor TServiceApplication.Destroy; begin FEventLogger.Free; Forms.Application.OnException := nil; Forms.Application.UnhookMainWindow(Hook); inherited Destroy; end; function TServiceApplication.Hook(var Message: TMessage): Boolean; begin Result := Message.Msg = WM_ENDSESSION; end; Т.е. мне нужно будет навесить свой хук на главное окно. Правда я с хуками не пересекался - поверх базового свой можно вешать?
_van 11 - 20.04.2004 - 16:37 | Ребята, объясните ламеру, плз, чем вас gpedit.msc сценарий(запуск/завершение) не устраивает?

>>