Windows Mobile

Türchen Nummer 1

Hallo und willkommen zu unserem Windows Mobile Adventskalender 2009.
Jeden Tag können sich Windows Mobile Entwickler nun auf ein kleines Codeschnipsel oder einen Tipp rund um Windows Mobile freuen.
Los geht es heute mit der Überprüfung ob Ihr Gerät denn auch bis kommende Weihnachten, also dem 24.12.2009 durchhält.
Dazu überprüfen wir die Batterie des Gerätes.
Die Funktion der Wahl ist GetSystemPowerStatusEx bzw. auch der State & Notification Broker (SNAPI).
Zum einmaligen bzw. nicht periodischen Abfragen kann man durchaus die GetSystemPowerStatusEx Funktion verwenden.
Möchte man jedoch durchgehend über den Batteriezustand informiert sein ist der State & Notification Broker die bessere Wahl, da man über Änderungen automatisch benachrichtigt werden kann.
Doch genug geredet, hier nun die Codeschnipsel:
//Struktur anlegen
SYSTEM_POWER_STATUS_EX sysPowerStatus;
//Struktur säubern
memset(&sysPowerStatus,0,sizeof(SYSTEM_POWER_STATUS_EX));
//Aktuellen Status abfragen und ausgeben
if(GetSystemPowerStatusEx(&sysPowerStatus,TRUE))
    printf("Batterie %d%%nLadend: %sn",
    sysPowerStatus.BatteryLifePercent,
    (sysPowerStatus.ACLineStatus != AC_LINE_ONLINE) ? "Nein" : "Ja");
else
printf("Fehler bei GetSystemPowerStatusExn");
C++
——————————————————————————–
In C# ist es leider nicht ganz so einfach, da hier mit P/Invoke gearbeitet werden muss, wenn man den genauen Ladestand in % erfahren möchte.
Zumindest für die Information, ob das Gerät lädt, lässt sich hier die SNAPI verwenden.
Bedenken Sie hierbei, dass Sie hierfür die Referenzen zu den Windows Mobile SDK Bibliotheken „Microsoft.WindowsMobile“ und „Microsoft.WindowsMobile.Status“ hinzufügen müssen.
Hier nun das verwaltete Snippet:
public class SYSTEM_POWER_STATUS_EX
{
    public byte ACLineStatus;
    public byte BatteryFlag;
    public byte BatteryLifePercent;
    public byte Reserved1;
    public uint BatteryLifeTime;
    public uint BatteryFullLifeTime;
    public byte Reserved2;
    public byte BackupBatteryFlag;
    public byte BackupBatteryLifePercent;
    public byte Reserved3;
    public uint BackupBatteryLifeTime;
    public uint BackupBatteryFullLifeTime;
}
class Program
{
    [DllImport("coredll")]
    private static extern uint GetSystemPowerStatusEx(SYSTEM_POWER_STATUS_EX lpSystemPowerStatus, bool fUpdate);
    static void Main(string[] args)
    {
        BatteryState batteryState = SystemState.PowerBatteryState;
        SYSTEM_POWER_STATUS_EX status = new SYSTEM_POWER_STATUS_EX();
        if (GetSystemPowerStatusEx(status, false) == 1)
        {
            Console.WriteLine("Batterie {0}%nLadend: {1}n", String.Format("{0}%", status.BatteryLifePercent), (batteryState == BatteryState.Charging ? "Ja" : "Nein"));
        }
   
    }
}
C#
Mehr zu GetSystemPowerStatusEx erhalten Sie hier:  http://msdn.microsoft.com/en-us/library/aa453172.aspx
 
Patrick & Peter

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s