3 Zeilen Code: Energieeffiziente Anwendungen mit Windows 7 entwickeln

In Windows 7 wurden diverse Mechanismen für verbessertes Energiemanagement integriert. Über die Systemsteuerung kann der Benutzer sein persönliches Energieschema einstellen, das je nach Stromzufuhr (Batterie oder Netzteil) mehr oder weniger Ressourcen benötigt.

So kann ein Notebookbenutzer seinen Stromverbrauch reduzieren, in dem er den Aero-Glas-Effekt im Energiesparmodus deaktiviert oder die Helligkeit seines Monitors reduziert. Dadurch kann die Laufzeit der Batterie verbessert werden. Möchte man bei einer Präsentation einen möglichst schnell Rechner mit allen grafischen Effekten demonstrieren, so empfiehlt sich der „High Performance“-Energieplan, der alle grafischen Effekte der Grafikkarte verwendet, aber dabei auch einen höheren Energieverbrauch hat.

Die Funktionalitäten der Energieverwaltung lassen sich mit wenigen Dreizeilern in eigenen Anwendungen integrieren. Dazu ist lediglich das Einbinden des Windows API Code Packs notwendig.

Die Klasse „PowerManager“ innerhalb des Windows API Code Pack bietet diverse statische Eigenschaften, Methoden und Ereignisse an, die den Zugriff auf die Windows 7-Energieverwaltung ermöglichen.

Prüfen welchen Energieplan der Rechner gerade verwendet

Das Ermitteln des aktuellen Energieplans funktioniert über die Eigenschaft PowerManager.PowerPersonality.

Console.WriteLine("Energieplan: " + PowerManager.PowerPersonality.ToString());

Batterieladezustand anzeigen

Der aktuelle Ladezustand der Batterie kann mit der folgenden Zeile ermittelt werden:

Console.WriteLine("Batterieladezustanst: " + 
                       PowerManager.BatteryLifePercent.ToString() + " %");

Stromquelle ermitteln

Ob der Rechner gerade an ein Netzteil angeschlossen ist oder über die Batterie betrieben wird, kann mit der folgenden Zeile dargestellt werden:

Console.WriteLine("Stromquelle: " + PowerManager.PowerSource.ToString());

Reagieren auf Änderung des Energieplans

Der verwendete Energieplan kann vom Benutzer jederzeit geändert werden, damit eine Anwendung dieses Ereignis behandeln kann, ist der folgende Code notwendig:

PowerManager.PowerPersonalityChanged += (s, e) =>
{
    // CheckPowerStatus();
};

Reagieren auf Änderungen der Stromzufuhr

Wenn sich die Stromzufuhr ändert, z.B. durch Entfernen des Stromkabels, dann kann man auf dieses Ereignis reagieren, in dem man den folgenden Code verwendet:

// Änderung der Stromquelle
PowerManager.PowerSourceChanged += (s, e) =>
{
    // CheckPowerStatus();
};

Änderungen des Batterieladezustands erfassen

Veränderungen am Batterieladezustand kann man mittels des Ereignis „BatteryLifePercentChanged“ ermitteln:

PowerManager.BatteryLifePercentChanged += (s, e) =>
{
    // CheckPowerStatus(); 
};

Energie-Status ausgeben

Mit den folgenden Zeilen lässt sich der aktuelle Status der Energieverwaltung ausgeben.

private void CheckPowerStatus()
{
    _statusMessages.Children.Clear();
    if (PowerManager.IsBatteryPresent)
    {
        AddMessage("Batterie ist vorhanden");
    }
    else
    {
        AddMessage("Keine Batterie ist vorhanden");
    }
    if (PowerManager.IsMonitorOn)
    {
        AddMessage("Monitor ist aktiv");
    }
    else
    {
        AddMessage("Monitor ist nicht aktiv");
    }
    AddMessage("Stromquelle: " + PowerManager.PowerSource.ToString());
    AddMessage("Batterieladezustanst: " + 
                   PowerManager.BatteryLifePercent.ToString() + " %");
    AddMessage("Energieplan: " + PowerManager.PowerPersonality.ToString());
}
private void AddMessage(string message)
{
    TextBlock tb = new TextBlock();
    tb.Text = message;
    _statusMessages.Children.Add(tb);
}

Das Ergebnis wird auf dem folgenden Screenshot gezeigt:

Zusammenfassung

Eine Anwendung sollte sich an den aktuellen Energieplan anpassen. Davon abhängig sollten gewisse Funktionalitäten aktiviert oder deaktiviert werden, um die Laufzeit der Batterie zu optimieren. Das Windows API Code Pack liefert dazu die Klasse „PowerManager“, die den Zugriff sehr leicht ermöglicht.

Codebeispiel - Power Management

 

Zur Artikelübersicht „3 Zeilen Code“