Windows Forms의 전원 관리
업데이트: 2007년 11월
Windows Forms 응용 프로그램을 사용하면 Windows 운영 체제의 강력한 관리 기능을 사용할 수 있습니다. 응용 프로그램에서 컴퓨터의 전원 상태를 모니터링하고 상태가 변경될 경우 조치를 취할 수 있습니다. 예를 들어, 휴대용 컴퓨터에서 응용 프로그램을 실행할 경우 컴퓨터의 배터리 충전이 일정 수준 이하가 되면 응용 프로그램의 특정 기능을 해제할 수 있습니다.
.NET Framework에서는 사용자가 운영 체제를 일시 중단하거나 다시 시작하는 경우 또는 AC 전원 상태나 배터리 상태가 변경되는 경우처럼 전원 상태가 변경될 때마다 발생하는 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.
}
}
PowerStatus 속성에는 BatteryChargeStatus 열거형 이외에 배터리 용량(BatteryFullLifetime) 및 배터리 충전율(BatteryLifePercent, BatteryLifeRemaining)을 확인할 수 있는 열거형도 있습니다.
Application의 SetSuspendState 메서드를 사용하면 컴퓨터를 최대 절전 모드나 일시 중단 모드로 만들 수 있습니다. 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);
}