You can use the following procedure
to detect if Windows is shutting
down. If your application needs to
save data before allowing the
shutdown to continue you can do that,
then allow Windows to shutdown
normally.
procedure TfrmMain.WMQueryEndSession(var Message :
TWMQueryEndSession);
begin
// Let the inherited message handler respond first
inherited;
if DataHasChanged then begin
MessageBeep(MB_ICONQUESTION);
case MessageDlg('The current Windows
session is ending. Save league changes?',
mtConfirmation, [mbYes,mbNo,mbCancel],0) of
mrYes : begin
//Your data-saving code or method
//call goes here
Message.Result := 1;
end;
mrNo : Message.Result := 1;
mrCancel : Message.Result := 0;
end; {case} end
else
Message.Result := 1;
end;