電源、バッテリーに関する情報を取得する.NET Framework 2.0からは、SystemInformationクラス(System.Windows.Forms名前空間)のPowerStatusプロパティにより、電源やバッテリーの情報を取得することができます。
補足:.NET Framework 1.1以前では、WMIのWin32_Batteryクラスを使うなどの方法により、バッテリーに関する情報を取得できます。
以下に示すコードでは、AC電源に接続されているかバッテリーを使用しているか、バッテリーの残量、残り時間などの情報を表示しています。 Dim ps As PowerStatus = SystemInformation.PowerStatus '電源に接続されているか Select Case ps.PowerLineStatus Case PowerLineStatus.Online Console.WriteLine("AC電源に接続されています") Case PowerLineStatus.Offline Console.WriteLine("バッテリーを使用しています") Case PowerLineStatus.Unknown Console.WriteLine("電源ステータスは不明です") End Select 'バッテリー残量 Console.WriteLine("バッテリー残量:{0}%", _ IIf(ps.BatteryLifePercent > 100, "(不明)", ps.BatteryLifePercent.ToString())) Console.WriteLine("残り時間:{0}秒/{1}秒", _ IIf(ps.BatteryLifeRemaining < 0, "(不明)", ps.BatteryLifeRemaining.ToString()), _ IIf(ps.BatteryFullLifetime < 0, "(不明)", ps.BatteryFullLifetime.ToString())) Select Case ps.BatteryChargeStatus Case BatteryChargeStatus.High Console.WriteLine("バッテリー残量は十分あります") Case BatteryChargeStatus.Low Console.WriteLine("バッテリー残量が少ないです") Case BatteryChargeStatus.Critical Console.WriteLine("すぐに充電してください") Case BatteryChargeStatus.Charging Console.WriteLine("充電中です") Case BatteryChargeStatus.NoSystemBattery Console.WriteLine("バッテリーを使用していません") Case BatteryChargeStatus.Unknown Console.WriteLine("バッテリー状態は不明です") End Select PowerStatus ps = SystemInformation.PowerStatus; //電源に接続されているか switch (ps.PowerLineStatus) { case PowerLineStatus.Online: Console.WriteLine("ACに接続されています"); break; case PowerLineStatus.Offline: Console.WriteLine("バッテリーを使用しています"); break; case PowerLineStatus.Unknown: Console.WriteLine("電源ステータスは不明です"); break; } //バッテリー残量 Console.WriteLine("バッテリー残量:{0}%", ps.BatteryLifePercent > 100 ? "(不明)" : ps.BatteryLifePercent.ToString()); Console.WriteLine("残り時間:{0}秒/{1}秒", ps.BatteryLifeRemaining < 0 ? "(不明)" : ps.BatteryLifeRemaining.ToString(), ps.BatteryFullLifetime < 0 ? "(不明)" : ps.BatteryFullLifetime.ToString()); switch (ps.BatteryChargeStatus) { case BatteryChargeStatus.High: Console.WriteLine("バッテリー残量は十分あります"); break; case BatteryChargeStatus.Low: Console.WriteLine("バッテリー残量が少ないです"); break; case BatteryChargeStatus.Critical: Console.WriteLine("すぐに充電してください"); break; case BatteryChargeStatus.Charging: Console.WriteLine("充電中です"); break; case BatteryChargeStatus.NoSystemBattery: Console.WriteLine("バッテリーを使用していません"); break; case BatteryChargeStatus.Unknown: Console.WriteLine("バッテリー状態は不明です"); break; } 電源、バッテリーの状態が変化したことを知るSystemEventsクラスのPowerModeChangedイベントにより、電源やバッテリーの状態が変化したことを知ることができます。例えば、AC電源からバッテリーへの移行、バッテリー電圧の低下などによりイベントが発生します。PowerModeChangedイベントは、OSが中断状態(スタンバイ、サスペンド状態)になったり、中断状態から復帰した場合にも発生しますが、下に示す例のように、これらを区別することができます。 'フォームのLoadイベントハンドラ Private Sub Form1_Load(ByVal sender As Object, _ ByVal e As EventArgs) Handles MyBase.Load 'イベントをイベント ハンドラに関連付ける 'フォームコンストラクタなどの適当な位置に記述してもよい AddHandler Microsoft.Win32.SystemEvents.PowerModeChanged, _ AddressOf SystemEvents_PowerModeChanged End Sub 'フォームのFormClosedイベントハンドラ Private Sub Form1_FormClosed(ByVal sender As System.Object, _ ByVal e As System.Windows.Forms.FormClosedEventArgs) _ Handles MyBase.FormClosed 'イベントを開放する 'フォームDisposeメソッド内の基本クラスのDisposeメソッド呼び出しの前に '記述してもよい RemoveHandler Microsoft.Win32.SystemEvents.PowerModeChanged, _ AddressOf SystemEvents_PowerModeChanged End Sub Private Sub SystemEvents_PowerModeChanged(ByVal sender As Object, _ ByVal e As Microsoft.Win32.PowerModeChangedEventArgs) Select Case e.Mode Case Microsoft.Win32.PowerModes.StatusChange Console.WriteLine("電源の状態が変化しました。") Case Microsoft.Win32.PowerModes.Suspend Console.WriteLine("OSが中断状態になりました。") Case Microsoft.Win32.PowerModes.Resume Console.WriteLine("OSが中断状態から復帰しました。") End Select End Sub //フォームのLoadイベントハンドラ private void Form1_Load(object sender, EventArgs e) { //イベントをイベント ハンドラに関連付ける //フォームコンストラクタなどの適当な位置に記述してもよい Microsoft.Win32.SystemEvents.PowerModeChanged += new Microsoft.Win32.PowerModeChangedEventHandler( SystemEvents_PowerModeChanged); } //フォームのFormClosedイベントハンドラ private void Form1_FormClosed(object sender, FormClosedEventArgs e) { //イベントを開放する //フォームDisposeメソッド内の基本クラスのDisposeメソッド呼び出しの前に //記述してもよい Microsoft.Win32.SystemEvents.PowerModeChanged -= new Microsoft.Win32.PowerModeChangedEventHandler( SystemEvents_PowerModeChanged); } private void SystemEvents_PowerModeChanged(object sender, Microsoft.Win32.PowerModeChangedEventArgs e) { switch (e.Mode) { case Microsoft.Win32.PowerModes.StatusChange: Console.WriteLine("電源の状態が変化しました。"); break; case Microsoft.Win32.PowerModes.Suspend: Console.WriteLine("OSが中断状態になりました。"); break; case Microsoft.Win32.PowerModes.Resume: Console.WriteLine("OSが中断状態から復帰しました。"); break; } } 注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。
|
|
Copyright(C) DOBON!. All rights reserved.
|