Windows 窗体中的电源管理

更新:2007 年 11 月

Windows 窗体应用程序可以使用 Windows 操作系统中的电源管理功能。应用程序可以监视计算机的电源状态,并在发生状态更改时采取措施。例如,如果应用程序在便携式计算机上运行,则可能需要在计算机的电池电量低于某一特定水平时禁用应用程序的某些功能。

.NET Framework 提供了 PowerModeChanged 事件,一旦电源状态更改时(例如,当用户挂起或继续操作系统时,或者当交流电源状态或电池状态更改时),此事件就会发生。SystemInformation 类的 PowerStatus 属性可以用来查询当前状态,如下面的代码示例所示:

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) 和电池电量百分比(BatteryLifePercentBatteryLifeRemaining)的枚举。

可以使用 ApplicationSetSuspendState 方法将计算机置于休眠或挂起模式。如果将 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);
    }

请参见

参考

PowerModeChanged

PowerStatus

SetSuspendState

SessionSwitch