Energieverwaltung in Windows Forms

Sie können für Ihre Windows Forms-Anwendungen die Energieverwaltungsfunktionen im Windows-Betriebssystem nutzen. Ihre Anwendungen können den Energiestatus eines Computers überwachen und im Fall einer Statusänderung Maßnahmen ergreifen. Wenn Ihre Anwendung beispielsweise auf einem tragbaren Computer ausgeführt wird, können Sie bestimmte Features in Ihrer Anwendung deaktivieren, wenn die Akkuladung des Computers unter eine bestimmte Schwelle fällt.

.NET Framework stellt ein PowerModeChanged-Ereignis bereit, das eintritt, wenn sich der Energiestatus ändert, z. B. wenn die Benutzer*innen das Betriebssystem pausieren oder fortsetzen oder wenn sich der Netz- oder der Akkustatus ändert. Die PowerStatus-Eigenschaft der SystemInformation-Klasse kann zum Abfragen des aktuellen Status verwendet werden, wie im folgenden Codebeispiel dargestellt.

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

Neben den BatteryChargeStatus-Enumerationen enthält die PowerStatus-Eigenschaft auch Enumerationen zum Bestimmen der Akkukapazität (BatteryFullLifetime) und Akkuladezustands in Prozent (BatteryLifePercent, BatteryLifeRemaining).

Sie können die SetSuspendState-Methode der Application verwenden, um einen Computer in den Ruhezustand zu versetzen oder anzuhalten. Wenn das force-Argument auf false festgelegt ist, sendet das Betriebssystem ein Ereignis an alle Anwendungen, die die Berechtigung zum Anhalten anfordern. Wenn das disableWakeEvent-Argument auf true festgelegt ist, deaktiviert das Betriebssystem alle Aktivierungsereignisse.

Im folgenden Codebeispiel wird veranschaulicht, wie ein Computer in den Ruhezustand versetzt wird.

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

Weitere Informationen