:: MVP ::
|
|
:: RSS ::
|
|
|
Как отследить смену питания на ноутбуке?
type
TForm1 = class(TForm)
{...}
Memo1: TMemo;
{...}
private
hNotifyPower: Pointer;
hNotifyBattery: Pointer;
procedure PowerBroadcast(var Msg: TMessage); message WM_POWERBROADCAST;
{...}
end;
{...}
implementation
procedure TForm1.Button1Click(Sender: TObject);
begin
// Изменение типа питания
hNotifyPower := RegisterPowerSettingNotification(Handle, GUID_ACDC_POWER_SOURCE, DEVICE_NOTIFY_WINDOW_HANDLE);
// Изменение заряда батареи
hNotifyBattery := RegisterPowerSettingNotification(Handle, GUID_BATTERY_PERCENTAGE_REMAINING, DEVICE_NOTIFY_WINDOW_HANDLE);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
UnregisterPowerSettingNotification(hNotifyPower);
UnregisterPowerSettingNotification(hNotifyBattery);
end;
procedure TForm1.PowerBroadcast(var Msg: TMessage);
var
PowerSetting: TPowerBroadcastSetting;
begin
if Msg.WParam = PBT_POWERSETTINGCHANGE then
begin
PowerSetting := PPowerBroadcastSetting(Msg.lParam)^;
if PowerSetting.PowerSetting = GUID_ACDC_POWER_SOURCE then
case PowerSetting.Data[0] of
0: Memo1.Lines.Add('питание от сети');
1: Memo1.Lines.Add('питание от батареи');
2: Memo1.Lines.Add('кратковременное питание от UPS или подобных устройств');
end;
if PowerSetting.PowerSetting = GUID_BATTERY_PERCENTAGE_REMAINING then
Memo1.Lines.Add('текущий процент заряда: ' + PowerSetting.Data[0].ToString);
end;
end;
|
Как узнать заряд батареи ноутбука?
procedure TForm1.Button1Click(Sender: TObject);
var
PowerStatus: TSystemPowerStatus;
Msg: string;
begin
GetSystemPowerStatus(PowerStatus);
case PowerStatus.ACLineStatus of
0: Msg := 'Компьютер работает автономно (от батареи или ИБП)'#13#13;
1: Msg := 'Компьютер работает от сети'#13#13;
255: Msg := 'Не удалось определить статус подключения к сети'#13#13;
end;
// это поле является комбинацией флагов
Msg := Msg + 'Общее состояние батареи:'#13;
if (PowerStatus.BatteryFlag shr 7) and 1 = 1 then
Msg := Msg + ' батарея не установлена или программа запущена на стационарном компьютере'#13
else
begin
if PowerStatus.BatteryFlag and 1 = 1 then
Msg := Msg + ' высокий уровень заряда (более 66%)'#13;
if (PowerStatus.BatteryFlag shr 1) and 1 = 1 then
Msg := Msg + ' низкий уровень заряда (менее 33%)'#13;
if (PowerStatus.BatteryFlag shr 2) and 1 = 1 then
Msg := Msg + ' критический уровень заряда (менее 5%)'#13;
if PowerStatus.BatteryFlag and 7 = 0 then
Msg := Msg + ' средний уровень заряда в диапазоне от 33% до 66% включительно'#13;
if (PowerStatus.BatteryFlag shr 3) and 1 = 1 then
Msg := Msg + ' батарея заряжается'#13;
end;
if PowerStatus.BatteryFlag = 255 then
Msg := Msg + ' данные получить не удалось'#13;
Msg := Msg + #13;
if PowerStatus.BatteryLifePercent in [0..100] then
Msg := Msg + 'осталось заряда: ' + PowerStatus.BatteryLifePercent.ToString + '%'
else if PowerStatus.BatteryLifePercent = 255 then
Msg := Msg + 'данные о оставшемся заряде получить не удалось, возможно программа запущена на стационарном компьютере';
ShowMessage(Msg);
end;
|
При использовании материала - ссылка на сайт обязательна
|
|