Administración de energía en formularios Windows Forms

Las aplicaciones de Windows Forms pueden aprovechar las características de administración de energía del sistema operativo Windows. Las aplicaciones pueden supervisar el estado de energía de un equipo y tomar medidas cuando se produce un cambio de estado. Por ejemplo, si la aplicación se ejecuta en un equipo portátil, es posible que le interese deshabilitar ciertas características de la aplicación cuando la carga de la batería del equipo caiga por debajo de un nivel determinado.

.NET Framework proporciona un evento PowerModeChanged que se produce cada vez que hay un cambio en el estado de energía, por ejemplo, cuando un usuario suspende o reanuda el sistema operativo, o cuando se produce un cambio en el estado de la alimentación de CA o de la batería. Para consultar el estado actual se puede usar la propiedad PowerStatus de la clase SystemInformation, como se muestra en el ejemplo de código siguiente.

public Form1()
{
    InitializeComponent();
    SystemEvents.PowerModeChanged += new PowerModeChangedEventHandler(SystemEvents_PowerModeChanged);
}

void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e)
{
    switch (SystemInformation.PowerStatus.BatteryChargeStatus)
    {
        case System.Windows.Forms.BatteryChargeStatus.Low:
            MessageBox.Show("Battery is running low.", "Low Battery", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            break;
        case System.Windows.Forms.BatteryChargeStatus.Critical:
            MessageBox.Show("Battery is critcally low.", "Critical Battery", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            break;
        default:
            // Battery is okay.
            break;
    }
}
Public Sub New()
    InitializeComponent()
    AddHandler Microsoft.Win32.SystemEvents.PowerModeChanged, AddressOf PowerModeChanged
End Sub

Private Sub PowerModeChanged(ByVal Sender As System.Object, ByVal e As Microsoft.Win32.PowerModeChangedEventArgs)
    Select Case SystemInformation.PowerStatus.BatteryChargeStatus
        Case BatteryChargeStatus.Low
            MessageBox.Show("Battery is running low.", "Low Battery", MessageBoxButtons.OK, _
                            System.Windows.Forms.MessageBoxIcon.Exclamation)
        Case BatteryChargeStatus.Critical
            MessageBox.Show("Battery is critically low.", "Critical Battery", MessageBoxButtons.OK, _
                            System.Windows.Forms.MessageBoxIcon.Stop)
        Case Else
            ' Battery is okay.
            Exit Select
    End Select
End Sub

Además de las enumeraciones BatteryChargeStatus, la propiedad PowerStatus también contiene enumeraciones para determinar la capacidad de la batería (BatteryFullLifetime) y el porcentaje de carga de la batería (BatteryLifePercent y BatteryLifeRemaining).

Puede usar el método SetSuspendState de Application para poner un equipo en modo de hibernación o suspensión. Si el argumento force se establece en false, el sistema operativo transmitirá un evento a todas las aplicaciones que solicitan permiso para suspender. Si el argumento disableWakeEvent se establece en true, el sistema operativo deshabilitará todos los eventos de reactivación.

En el ejemplo de código siguiente se muestra cómo poner un equipo en hibernación.

if (SystemInformation.PowerStatus.BatteryChargeStatus == System.Windows.Forms.BatteryChargeStatus.Critical)
{
    Application.SetSuspendState(PowerState.Hibernate, false, false);
}
If SystemInformation.PowerStatus.BatteryChargeStatus = System.Windows.Forms.BatteryChargeStatus.Critical Then
    Application.SetSuspendState(PowerState.Hibernate, False, False)
End If

Consulte también