Июл 5, 2014 - Уроки Visual Basic.NET 3 комментария
Уровень заряда батареи на ноутбуке
Как узнать уровень заряда батареи на ноутбуке? Да, довольно просто!
На помощь приходит API функция - GetSystemPowerStatus
С помощью данной функции, можно определить:
- уровень заряда аккумулятора (батареи в ноутбуке или ИБП)
- подключен ли к сети:
- 0 - не подключен к сети
- 1 - подключен к сети
- 255 - неизвестно
- заряд батареи (высокий, нормальный, низкий и т.д)
- время работы от батареи
- максимальное время работы от батареи
На форму, киньте только ListBox.
Public Class Form1 WithEvents Tmr As Timer = New Timer Dim SPSInfo As SYSTEM_POWER_STATUS Public Sub New() ' Этот вызов необходим конструктору форм Windows. InitializeComponent() Tmr.Interval = 1000 ' интервал 1 секунда AddHandler Tmr.Tick, AddressOf Tmr_Tick ' добавляем обработчик события Tmr.Start() End Sub Private Declare Auto Function GetSystemPowerStatus Lib "kernel32.dll" ( _ ByRef lpSystemPowerStatus As SYSTEM_POWER_STATUS) _ As Integer Public Structure SYSTEM_POWER_STATUS Public ACLineStatus As Byte ' подключение к сети Public BatteryFlag As BatteryFlag ' состояние батареи - заряд батареи Public BatteryLifePercent As Byte ' оставшийся ресурс батареи - уровень заряда(в процентах) Public Reserved1 As Byte ' заразервированно Public BatteryLifeTime As Integer ' оставшиеся время работы (в секундах) Public BatteryFullLifeTime As Integer ' полное время работы батареи End Structure Public Enum BatteryFlag As Byte Высокий = 1 Нормальный = 0 Низкий = 2 Критический = 4 Заряжается = 8 ' иногда проскакивают и другие значения БатареяОтсутствует = 128 Неизвестно = 255 End Enum Sub Tmr_Tick() ListBox1.Items.Clear() ' очищаем GetSystemPowerStatus(SPSInfo) ' питание If SPSInfo.ACLineStatus Then ListBox1.Items.Add("Питание от сети") ElseIf SPSInfo.ACLineStatus = 0 Then ListBox1.Items.Add("Питание от батареи") Else ListBox1.Items.Add("Питание: неизвестно") End If ListBox1.Items.Add("Уровень заряда: " & SPSInfo.BatteryLifePercent & "%") ' уровень заряда ListBox1.Items.Add("Заряд батареи: " & SPSInfo.BatteryFlag.ToString) ' заряд батареи ' оставшиеся время работы от батареи [timespan в помощь.] Dim h As Integer, m As Integer m = SPSInfo.BatteryLifeTime / 60 ' min If m < 60 Then ListBox1.Items.Add("Осталось " & m & " мин") Else h = Math.Round(m / 60) ' hours m = m - (h * 60) ' min ListBox1.Items.Add("Осталось " & h & " ч. " & m & " мин") End If End Sub End Class
Так выглядит информация, когда ноутбук заряжается от БП:
при зарядке, время не показывается.
Скоро напишу данный пример на C# ! Ждите :]
Похожие записи:
Метки: GetSystemPowerStatus, аккумулятор, батарея, батарея в ноутбуке, заряд батареи, ноутбук, уровень заряда батареи
Евгений
Просмотров: 13 531
Запись опубликована в 07:55
Анимацию еще бы сделать
Ну в Visual C# самое сложное понять как объявить...
using System.Runtime.InteropServices;
Внутри класса:
[DllImport("kernel32")]
public static extern int GetSystemPowerStatus(ref SYSTEM_POWER_STATUS lpSystemPowerStatus);
public struct SYSTEM_POWER_STATUS
{
public byte ACLineStatus; // подключение к сети
public byte BatteryFlag; // состояние батареи - заряд батареи
public byte BatteryLifePercent; // оставшийся ресурс батареи - уровень заряда(в процентах)
public byte Reserved1; // заразервированно
public int BatteryLifeTime; // оставшиеся время работы (в секундах)
public int BatteryFullLifeTime; // полное время работы батареи
}
Ну с Public Enum BatteryFlag я не стал запариваться..))
Использование (без задания значения SPSInfo редактор ругается):
SYSTEM_POWER_STATUS SPSInfo;
SPSInfo.ACLineStatus = 1;// подключение к сети
SPSInfo.BatteryFlag = 1;// состояние батареи - заряд батареи
/* Высокий = 1 Нормальный = 0 Низкий = 2
Критический = 4 Заряжается = 8 ' иногда проскакивают и другие значения
БатареяОтсутствует = 128 Неизвестно = 255 */
SPSInfo.BatteryLifePercent = 1;// оставшийся ресурс батареи - уровень заряда(в процентах)
SPSInfo.Reserved1 = 1;// заразервированно
SPSInfo.BatteryLifeTime = 1;// оставшиеся время работы (в секундах)
SPSInfo.BatteryFullLifeTime = 1;// полное время работы батареи
GetSystemPowerStatus(ref SPSInfo);
Если хотите, можете написать статью и приложить проект!?) Стоит только зарегистрироваться, я дам права и все