Управление питанием в Windows Forms
Обновлен: Ноябрь 2007
Приложения Windows Forms могут использовать функции управления питанием операционной системы Windows. Приложения могут отслеживать состояние питания компьютера и принимать соответсвующие меры при изменении этого состояния. Например, если приложение выполняется на переносном компьютере, можно отключить определенные функции приложения, когда заряд батареи падает ниже определенного уровня.
В среде .NET Framework предусмотрено событие PowerModeChanged, происходящее при изменении состояния питания, например при приостановке или возобновлении пользователем работы операционной системы, а также при изменении состояния питания от сети или уровня заряда батареи. Для запроса текущего состояния может использоваться свойство PowerStatus класса SystemInformation, как показано в следующем примере.
Private Sub PowerModeChanged(ByVal Sender As System.Object, ByVal e As _
Microsoft.Win32.PowerModeChangedEventArgs)
Dim si As System.Windows.Forms.SystemInformation
Select Case si.PowerStatus.BatteryChargeStatus
Case BatteryChargeStatus.Low
MessageBox.Show("Battery is running low", _ System.Windows.Forms.MessageBoxIcon.Exclamation)
Case BatteryChargeStatus.Critical
MessageBox.Show("Battery is critically low", _ System.Windows.Forms.MessageBoxIcon.Stop)
Case Else
' Battery is okay.
Exit Select
End Select
End Sub
private void powerModeChanged(System.Object sender, _
Microsoft.Win32.PowerModeChangedEventArgs e)
{
int si = SystemInformation.PowerStatus;
switch (si)
{
case BatteryChargeStatus.Low:
MessageBox.Show("Battery is running low", _ MessageBoxIcon.Exclamation);
case BatteryChargeStatus.Low:
MessageBox.Show("Battery is critcally low", _ MessageBoxIcon.Stop);
Default:
// Battery is okay.
}
}
Помимо перечислений BatteryChargeStatus свойство PowerStatus также содержит перечисления для определения заряда батареи (BatteryFullLifetime) и процента заряда батареи (BatteryLifePercent, BatteryLifeRemaining).
Для перевода компьютера в спящий или ждущий режим можно использовать метод SetSuspendState класса Application. Если для аргумента force установлено значение false, операционная система будет рассылать событие всем приложениям, запрашивая разрешение на приостановку. Если для аргумента disableWakeEvent установлено значение true, операционная система отключает все события пробуждения.
В следующем примере кода демонстрируется перевод компьютера в спящий режим.
Private si as System.Windows.Forms.SystemInformation
If si.PowerStatus.BatteryChargeStatus.Critical = True Then
Application.SetSuspendState(PowerState.Hibernate, False, False)
End If
if (SystemInformation.PowerStatus.BatteryChargeStatus.ToString() == _
"Critical")
{
Application.SetSuspendState (PowerState.Hibernate, false, false);
}