Поделиться через


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

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

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

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;
    }
}
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

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

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

В следующем примере кода показано, как поместить компьютер в режим гибернации.

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

См. также