Программно предотвратить завершение работы Windows

Я хочу, чтобы Windows XP не выключалась, пока работает мое приложение Delphi, и я попробовал следующее:

procedure TForm1.FormCreate(Sender: TObject);
begin
  SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 0, nil, 0);
  SystemParametersInfo(SPI_SETPOWEROFFACTIVE, 0, nil, 0);
  SystemParametersInfo(SPI_SETLOWPOWERACTIVE, 0, nil, 0);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  SystemParametersInfo(SPI_SETSCREENSAVEACTIVE, 1, nil, 0);
  SystemParametersInfo(SPI_SETPOWEROFFACTIVE, 1, nil, 0);
  SystemParametersInfo(SPI_SETLOWPOWERACTIVE, 1, nil, 0);
end;

но это, кажется, не работает. У кого есть другие предложения?
TIA
Стивен


person stevenvh    schedule 26.07.2009    source источник


Ответы (2)


Вот ответ на ваш вопрос:

Обнаружение и предотвращение завершения работы Windows http://delphi.about.com/cs/adptips2000/a/bltip0500_4.htm

person Robert Harvey    schedule 26.07.2009
comment
+1 за эту ссылку - код, на который вы ссылаетесь, выглядит удивительно похожим на то, как я это делал в течение длительного времени, не позволяя устаревшим машинам Windows переходить в спящий режим или закрываться, когда я этого не хочу. - person robsoft; 26.07.2009

Я вообще не знаком с Delphi, но просто с точки зрения пользователя: я не хочу, чтобы программы могли это делать, и я бы серьезно разозлился на Microsoft, если бы они позволили это.

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

Я не говорю, что это невозможно, но если бы я делал ОС, я бы активно усложнял или даже делал бы невозможным для вас это, поскольку у нее просто слишком много возможностей для злоупотреблений. Таким образом, вы вполне можете обнаружить, что даже Microsoft придерживалась такого мнения и действительно не сделала это возможным.

person Jasper    schedule 26.07.2009
comment
Я не уверен, что это вполне разумная точка зрения... Уже существует ряд программ Microsoft, которые при завершении работы выводят диалоговое окно с вопросом, хотите ли вы сохраниться. Если вы нажмете «Отмена», он отменит выключение. - person Robert Harvey; 26.07.2009
comment
Насколько я знаю, это не так. По сути, Windows сначала сообщает программе (скажем, слову) о завершении работы. Затем Word спрашивает пользователя, хочет ли он сохранить. Когда вы нажмете «Отмена», закрытие слова будет отменено, что означает, что оно фактически игнорирует полученную команду. Тем не менее, у вас есть время до начала следующей фазы, но к тому времени, когда это произойдет, Windows просто начнет убивать процессы, если они игнорируют команду на завершение работы. Таким образом, Windows выключится. По крайней мере, я никогда не видел другого, хотя могу, конечно, ошибаться. - person Jasper; 26.07.2009
comment
Я почти уверен, что запуск процесса MSSQL может фактически предотвратить закрытие окон... Не уверен на 100%, но почти уверен... - person Paulius; 26.07.2009
comment
Ну, как я сказал, я никогда этого не видел и считаю логичным, что это невозможно, но это ни в коем случае не может быть сделано; Я никогда этого не утверждал. - person Jasper; 26.07.2009
comment
Задача, предотвращающая закрытие Windows, не предотвращает удаление вызывающей нарушение задачи из диспетчера задач. - person Loren Pechtel; 26.07.2009
comment
Это правда, но это не самое сложное, что можно обойти (и вы сначала знаете, что такое оскорбительный процесс (ы)). - person Jasper; 26.07.2009
comment
Не все приложения являются стандартными настольными приложениями. Например, промышленные операционные панели на базе WinXP Embedded — это одно из мест, где такая функция может быть полезна. - person Harriv; 27.07.2009
comment
+1 Здесь я согласен с Джаспером. Конечно, приложения должны иметь возможность реагировать на выключение, но предотвратить выключение? Если я хочу выключить свой компьютер, я хочу выключить его так, чтобы какое-либо приложение не мешало ему. - person jpfollenius; 27.07.2009