| When Windows is about to shut down, it sends a WM_QueryEndSession to all open applications. To detect (and prevent shutdown) , we must define a message handler to this message. Put this definition on the private section of the main form: procedure WMQueryEndSession(var Msg : TWMQueryEndSession) ; message WM_QueryEndSession;
Also, to prevent Windows shutting down put this method in the implementation section of the unit:
procedure TForm1.WMQueryEndSession(var Msg : TWMQueryEndSession) ;
begin
if MessageDlg('Close Windows ?', mtConfirmation, [mbYes,mbNo], 0) = mrNo then
Msg.Result := 0
else
Msg.Result := 1 ;
end;
To detect Windows Shutdown, we must trap the WM_ENDSESSION message.
Declare a message handling procedure in your main Form's Private section: Procedure WMEndSession(var Msg : TWMEndSession) ; message WM_ENDSESSION;
Also, add the following procedure to the implementation section of your Unit:
procedure TForm1.WMEndSession(var Msg : TWMEndSession) ;
begin
if Msg.EndSession = TRUE then
ShowMessage('Windows is shutting down ' + #10#13 + 'at ' + FormatDateTime('c', Now)) ;
inherited;
end; |