How to detect Windows shutdown or logoff
Attach an event handler method to the SystemEvents.SessionEnding
event, and your handler method will be called each time the event is raised. Handling this event will allow you to cancel the pending log off or shut down, if you wish. (Although that doesn't actually work like it sounds in current operating systems; for more information see the MSDN documentation here.)
If you don't want to cancel the event, but just react to it appropriately, you should handle the SystemEvents.SessionEnded
event instead.
You must make sure that you detach your event handlers when the application is closed, however, because both of these are static events.
Now you should use something like this:
private static int WM_QUERYENDSESSION = 0x11;protected override void WndProc(ref System.Windows.Forms.Message m){ if (m.Msg==WM_QUERYENDSESSION) { MessageBox.Show("queryendsession: this is a logoff, shutdown, or reboot"); } base.WndProc(ref m);}