1. Technology

Detecting and preventing Windows shut down

By

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;
~~~~~~~~~~~~~~~~~~~~~~~~~

Delphi tips navigator:
» Overwrite in TMemo and TEdit - Clear All Edit Controls on a Form
« ListBox with a horizontal scroll bar

©2014 About.com. All rights reserved.