Управление питанием в Windows Forms

Приложения Windows Forms могут использовать функции управления питанием операционной системы Windows. Приложения могут отслеживать состояние питания компьютера и принимать соответсвующие меры при изменении этого состояния. Например, если приложение выполняется на переносном компьютере, можно отключить определенные функции приложения, когда заряд батареи падает ниже определенного уровня.

В среде .NET Framework предусмотрено событие PowerModeChanged, происходящее при изменении состояния питания, например при приостановке или возобновлении пользователем работы операционной системы, а также при изменении состояния питания от сети или уровня заряда батареи. Для запроса текущего состояния может использоваться свойство PowerStatus класса SystemInformation, как показано в следующем примере.

Public Sub New()
    InitializeComponent()
    AddHandler Microsoft.Win32.SystemEvents.PowerModeChanged, AddressOf PowerModeChanged
End Sub

Private Sub PowerModeChanged(ByVal Sender As System.Object, ByVal e As Microsoft.Win32.PowerModeChangedEventArgs)
    Select Case SystemInformation.PowerStatus.BatteryChargeStatus
        Case BatteryChargeStatus.Low
            MessageBox.Show("Battery is running low.", "Low Battery", MessageBoxButtons.OK, _
                            System.Windows.Forms.MessageBoxIcon.Exclamation)
        Case BatteryChargeStatus.Critical
            MessageBox.Show("Battery is critically low.", "Critical Battery", MessageBoxButtons.OK, _
                            System.Windows.Forms.MessageBoxIcon.Stop)
        Case Else
            ' Battery is okay.
            Exit Select
    End Select
End Sub
public Form1()
{
    InitializeComponent();
    SystemEvents.PowerModeChanged += new PowerModeChangedEventHandler(SystemEvents_PowerModeChanged);
}

void SystemEvents_PowerModeChanged(object sender, PowerModeChangedEventArgs e)
{
    switch (SystemInformation.PowerStatus.BatteryChargeStatus)
    {
        case System.Windows.Forms.BatteryChargeStatus.Low:
            MessageBox.Show("Battery is running low.", "Low Battery", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            break;
        case System.Windows.Forms.BatteryChargeStatus.Critical:
            MessageBox.Show("Battery is critcally low.", "Critical Battery", MessageBoxButtons.OK, MessageBoxIcon.Stop);
            break;              
        default:
            // Battery is okay.
            break;
    }
}

Помимо перечислений BatteryChargeStatus свойство PowerStatus также содержит перечисления для определения заряда батареи (BatteryFullLifetime) и процента заряда батареи (BatteryLifePercent, BatteryLifeRemaining).

Для перевода компьютера в спящий или ждущий режим можно использовать метод SetSuspendState класса Application. Если для аргумента force установлено значение false, операционная система будет рассылать событие всем приложениям, запрашивая разрешение на приостановку. Если для аргумента disableWakeEvent установлено значение true, операционная система отключает все события пробуждения.

В следующем примере кода демонстрируется перевод компьютера в спящий режим.

If SystemInformation.PowerStatus.BatteryChargeStatus = System.Windows.Forms.BatteryChargeStatus.Critical Then
    Application.SetSuspendState(PowerState.Hibernate, False, False)
End If
if (SystemInformation.PowerStatus.BatteryChargeStatus == System.Windows.Forms.BatteryChargeStatus.Critical)
{
    Application.SetSuspendState(PowerState.Hibernate, false, false);
}

См. также

Ссылки

PowerModeChanged

PowerStatus

SetSuspendState

SessionSwitch

Журнал изменений

Дата

Журнал

Причина

Ноябрь 2010 г.

Исправлены ошибки в примере кода.

Обратная связь от клиента.