Udostępnij przez


Zarządzanie energią w formularzach systemu Windows

Aplikacje Windows Forms mogą korzystać z funkcji zarządzania energią w systemie operacyjnym Windows. Aplikacje mogą monitorować stan zasilania komputera i podejmować działania po zmianie stanu. Jeśli na przykład aplikacja jest uruchomiona na komputerze przenośnym, możesz wyłączyć niektóre funkcje w aplikacji, gdy obciążenie baterii komputera spadnie poniżej określonego poziomu.

Program .NET Framework udostępnia zdarzenie PowerModeChanged, które występuje za każdym razem, gdy wystąpi zmiana stanu zasilania, na przykład gdy użytkownik zawiesza lub wznawia działanie systemu operacyjnego, albo gdy stan zasilania prądu ac lub stan baterii ulegnie zmianie. Właściwość PowerStatus klasy SystemInformation może służyć do wykonywania zapytań o bieżący stan, jak pokazano w poniższym przykładzie kodu.

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

Oprócz wyliczenia BatteryChargeStatus właściwość PowerStatus zawiera również wyliczenia służące do określania pojemności baterii (BatteryFullLifetime) i procent naładowania baterii (BatteryLifePercent, BatteryLifeRemaining).

Możesz użyć metody SetSuspendStateApplication, aby przełączyć komputer w stan hibernacji lub zawieszenia. Jeśli argument force jest ustawiony na false, system operacyjny będzie emitować zdarzenie do wszystkich aplikacji żądających uprawnień do wstrzymania. Jeśli argument disableWakeEvent jest ustawiony na true, system operacyjny wyłącza wszystkie zdarzenia budzenia.

W poniższym przykładzie kodu pokazano, jak umieścić komputer w hibernacji.

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

Zobacz także