Windows 窗体中的电源管理
更新:2010 年 11 月
Windows 窗体应用程序可以使用 Windows 操作系统中的电源管理功能。 应用程序可以监视计算机的电源状态,并在发生状态更改时采取措施。 例如,如果应用程序在便携式计算机上运行,则可能需要在计算机的电池电量低于某一特定水平时禁用应用程序的某些功能。
.NET Framework 提供了 PowerModeChanged 事件,一旦电源状态更改时(例如,当用户挂起或继续操作系统时,或者当交流电源状态或电池状态更改时),此事件就会发生。 SystemInformation 类的 PowerStatus 属性可以用来查询当前状态,如下面的代码示例所示:
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)的枚举。
可以使用 Application 的 SetSuspendState 方法将计算机置于休眠或挂起模式。 如果将 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);
}
请参见
参考
修订记录
日期 |
修订记录 |
原因 |
---|---|---|
2010 年 11 月 |
修复了代码示例中的错误。 |
客户反馈 |