Всем привет дорогие друзья. В этой статье мы рассмотрим с Вами, как можно предотвратить выключение операционной системы Windows на Delphi. Этот вопрос меня затронул, так как необходимо было на работе, включить своим пользователям напоминание, когда они выключают компьютер.
Как известно, при завершении, перезагрузке, работы Windows, операционная система посылает сообщение, которые можно отловить и определить, когда Windows завершает работу, а также предотвратить это. Windows в этом случае посылает сообщение WM_QUERYENDSESSION, которое мы и будем отлавливать.
Для начала, нам необходимо объявить процедуру в спецификаторе доступа private, она выглядит следующим образом:
procedure WMQueryEndSession (var Msg : TWMQueryEndSession); message WM_QUERYENDSESSION;
После implementation пишем описание для нашей процедуры. Никаких сочетаний клавиш (Ctrl+Shift+C) не нажимаем, а именно сразу после implementation, вот так:
В противном случае, у Вас просто, будет не работать данный пример. Вот в принципе и все, код, который отлавливает завершение Windows представлен ниже:
procedure TForm1.WMQueryEndSession
(var Msg : TWMQueryEndSession) ;
var
P:String;
begin
try
if Application.MessageBox('Вы отправили накладные на реализацию БСО в ЭБД ?',
'Внимание', MB_YESNO)<>IDYES then
begin
Ini:=TIniFile.Create(ExtractFilePath(ParamStr(0))+'Setting.ini');
P:=Ini.ReadString('Main','Patch','');
//ShowMessage(P);
Msg.Result:=0;
ShellExecute(Handle,nil,PChar(P),'','',SW_SHOW);
end
else
Msg.Result:=1;
except
on e:Exception do
//-//-//-//-//-//-//-//-//
end;
end;
Как видите, я сначала вывожу сообщение, когда пользователь нажал на кнопку выключения Windows. В данном сообщении, если пользователь нажимаем на кнопку «Да», то Windows завершает свою работу, в противном случае Windows не завершается, а запускается нужная программа. Вот такие напоминания Вы можете делать у себя, удачи, если что-то не понятно Вам, обращайтесь в комментарии.
Если Вам понравилась статья, то подпишитесь на обновления!
Также советуем почитать на PressDev.RU
Короткая ссылка: http://pressdev.ru/?p=1557