Impedir que se cierre la sesión de Windows

2694 vistas

Para ello tendremos que añadir las siguientes líneas de código en nuestra clase, lo que permitirá detectar el intento de cierre de sesión y anularlo:



csharp
  1. // Mensaje de Windows QueryEndSession
  2. private const int WM_QUERYENDSESSION = 0x11;
  3. // flag que indica si la sesión se va a cerrar
  4. private bool _systemShutdown = false;
  5. // redefinición de la función virtual WndProc
  6. protected override void WndProc(ref System.Windows.Forms.Message m )
  7. {
  8.     if (m.Msg == WM_QUERYENDSESSION)
  9.       _systemShutdown = true;
  10.     base.WndProc(ref m);
  11. }
  12.  
  13. // evento closing
  14. private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
  15. {
  16.     // si se ha enviado el mensaje de cierre, lo anulamos
  17.     if (_systemShutdown)
  18.     {
  19.         e.Cancel = true;
  20.         _systemShutdown = false;
  21.         MessageBox.Show("Cierre de la sesión Windows anulada");
  22.     }
  23. }



Para probar el código, compilar la aplicación y ejecutarla fuera del IDE.

Ahora, añade este código en InitializeComponent para gestionar el evento Closing.



csharp
  1. this.Closing += new CancelEventHandler(Form1_Closing);