Bunun için SystemEvents fonksiyonlarına bakmalısınız.

Bir örnek.
private static int WM_QUERYENDSESSION = 0x11;
protected override void WndProc(ref System.Windows.Forms.Message m)
{ 
              if (m.Msg==WM_QUERYENDSESSION) 
                    { 
                          MessageBox.Show("Log-off, Shutdown veya Reboot işlemi sonucu form kapandı.");
                    } 
             base.WndProc(ref m); 
}
Ancak, benim tavsiyem programınızı bir windows servisi haline getirmeniz olur.