Всем добрый день, посоветуйте, как правильно использовать
обработчик OnQueryEndSession?
Мне нужно притормозить завершение работы Windows XP
на несколько секунд, пока моя программа доделает свои дела

С большим удивлением заметил, что это не так-то просто!
Установка в обработчике Accept := false полностью
прерывает процесс Shutdown'а, а использование цикла ожидания типа
while Some_Custom_Flag do Sleep (100); Accept := true;
не приостанавливает выполнение процесса — программа всё равно
закрывается!
Прервать Shutdown, а потом инициировать его самому ещё раз,
непросто по причине того, тогда нужно как-то определить, что же
это было — выключение компьютера или перезагрузка.
Здравствуйте, Vladimyr, Вы писали:
V>Всем добрый день, посоветуйте, как правильно использовать
V>обработчик OnQueryEndSession?
V> Мне нужно притормозить завершение работы Windows XP
V>на несколько секунд, пока моя программа доделает свои дела
А разве нельзя сделать так, чтобы свои дела программа в этом случае доделывала в отдельном потоке? При обработке события OnQueryEndSession нужно создать поток, который будет этим заниматься, после чего можно уснуть до окончания его работы с помощью функции WaitForSingleObject...
Здравствуйте, Vladimyr, Вы писали:
V>Всем добрый день, посоветуйте, как правильно использовать
V>обработчик OnQueryEndSession?
V> Мне нужно притормозить завершение работы Windows XP
V>на несколько секунд, пока моя программа доделает свои дела
V>С большим удивлением заметил, что это не так-то просто!
V>Установка в обработчике Accept := false полностью
V>прерывает процесс Shutdown'а, а использование цикла ожидания типа
V>while Some_Custom_Flag do Sleep (100); Accept := true;
V>не приостанавливает выполнение процесса — программа всё равно
V>закрывается!
Попробуй обработать WM_ENDSESSION, которое придет после WM_QUERYENDSESSION. Это как раз то место, где положено выполнять всякие закрывающие действия. Можно даже диалог открыть и пользователя спросить. А WM_QUERYENDSESSION не обрабатывай вообще, оно просто отвечает, согласен ты или нет закрыться.
V> Прервать Shutdown, а потом инициировать его самому ещё раз,
V>непросто по причине того, тогда нужно как-то определить, что же
V>это было — выключение компьютера или перезагрузка.