Проверяем заряд аккумулятора на мобильном устройстве в C#

    В этой публикации я приведу пример получения информации о заряде аккумуляторов на мобильном устройстве под управлением Windows Mobile. Данный код написан очень давно. На днях вновь понадобился.
    Для получения информации о заряде используем coredll. Получаем значения двух батареек, во многих КПК (во всяком случае промышленных, на подобии этого) используются 2 аккумулятора, один основной, другой резервный, для сохранности данных. Информацию можно получить и с того и с другого, если он конечно имеется.

Ну да хватит болтовни, к делу. Пример:

using System;
using System.Linq;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;

namespace PowerStatus
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }


        /*Начало: Проверка батареек*/

        //Более старая функция.
        [DllImport("coredll")]
        static public extern uint GetSystemPowerStatusEx(SYSTEM_POWER_STATUS_EX lpSystemPowerStatus, bool fUpdate);
        
        //Более новая функция (побольше возможностей.
        [DllImport("coredll")]
        static public extern uint GetSystemPowerStatusEx2(SYSTEM_POWER_STATUS_EX2 lpSystemPowerStatus, uint dwLen, bool fUpdate);
        

        //Структура новой функции.
        public class SYSTEM_POWER_STATUS_EX2
        {
            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;
            public uint BatteryVoltage;
            public uint BatteryCurrent;
            public uint BatteryAverageCurrent;
            public uint BatteryAverageInterval;
            public uint BatterymAHourConsumed;
            public uint BatteryTemperature;
            public uint BackupBatteryVoltage;
            public byte BatteryChemistry;
        }
        
        //Структура старой функции.
        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;
        }
        

        //Непосредственно - Функция получения информациии о заряде батареек.
        //Буду использовать старубю функцию.
        protected virtual string ReportPowerStatus(string what)
        {
            string result = "";
            try
            {
                string status = string.Empty;

                SYSTEM_POWER_STATUS_EX powerStatus;
                powerStatus = new SYSTEM_POWER_STATUS_EX();

                GetSystemPowerStatusEx(powerStatus, true);

                

                string battery1 = powerStatus.BatteryLifePercent.ToString();

                string battery2 = powerStatus.BackupBatteryLifePercent.ToString();

                //Если передан параметр main - то основная батарея иначе backup батарея.
                if (what == "main")
                {
                    result = battery1;
                }
                else
                {
                    result = battery2;
                }

            }
            catch
            {

            }
            return result;
        }



        /*Конец: Проверка батареек*/






        private void menuItem2_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }

        private void menuItem3_Click(object sender, EventArgs e)
        {
            //Отображаем заряд батареек.
            label1.Text = ReportPowerStatus("main");
            label2.Text = ReportPowerStatus("backup");
            //backup - может показать значение 255 - Это означает что значение не определено.
            //Я это связываю с отсутствием батареи (возможно я ошибаюсь)
            //Может надо просто воспользоваться более новой функцией.
            //На более древних ОС всё нормально.
        }
    }
}


Вот собственно и всё.

Исходник: PowerStatus.rar
  • 25 февраля 2010, 11:41
  •      
  • Roman


Комментарии (0)

RSS свернуть / развернуть

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.