電源・バッテリーの情報を調べる
Windowsのコントロールパネルで『電源オプション』を調べると、バッテリの残量なんかを見ることが出来ます。こんな風に電源やバッテリーの状態を調べてみましょう。。
SystemInformation.PowerStatusを使用する
System.Windows.Forms.SystemInformationのプロパティの一つに紐付けられているPowerStatusクラスを使用します。具体的には次のようにします。import clr
clr.AddReference('System.Windows.Forms')
from System.Windows.Forms import SystemInformation
from System.Windows.Forms import PowerLineStatus
ps = SystemInformation.PowerStatus
まずSystemInformationのPowerStatusプロパティからPowerStatusクラスのpsを作ります。あとはpsから情報を入手するスクリプトです。#電源に接続されているか
if ps.PowerLineStatus == PowerLineStatus.Online :
print "コンセントに接続されています。"
elif ps.PowerLineStatus == PowerLineStatus.Offline :
print "バッテリーを使用しています。"
elif ps.PowerLineStatus == PowerLineStatus.Unknown :
print "電源の状態がわかりません。"
PowerLineStatusは.NET Framework内で定義されている列挙体です。Online、Offline、Unkownという言葉の状態が定義されています。スクリプト中ではpsのPowerLineStatusがどれになっているか調べています。
#バッテリー残量
print "バッテリー残量:",ps.BatteryLifePercent *100,"%"
if ps.PowerLineStatus == PowerLineStatus.Offline :
if ps.BatteryLifeRemaining >0 :
print "バッテリーの残り時間:",ps.BatteryLifeRemaining/3600,":",
print ps.BatteryLifeRemaining/60 - ps.BatteryLifeRemaining/3600*60
バッテリーの残量を調べるスクリプトです。Microsoftの記述にはBatteryLifePercentは0〜100までの数字で、不明なときは255を返すと書かれていますが、ウソです。調べた限りでは全部1以下で100を掛けないとパーセントになりません。
BatteryLifeRemainingはバッテリがどこまでもつか秒単位の時間を示します。
秒から時間と分に換算するところは、電卓を叩いてみてください。
#充電状態チェック
if ps.BatteryChargeStatus.ToString().find('High')>=0 :
print "バッテリー残量は十分あります。"
if ps.BatteryChargeStatus.ToString().find('Low')>=0 :
print "バッテリー残量が少ないです。"
if ps.BatteryChargeStatus.ToString().find('Critical')>=0 :
print "すぐに充電してください。"
if ps.BatteryChargeStatus.ToString().find('Charging')>=0 :
print "充電中です。"
if ps.BatteryChargeStatus.ToString().find('NoSystemBattery')>=0 :
print "バッテリーを使用していません。"
if ps.BatteryChargeStatus.ToString().find('Unknown')>=0 :
print "バッテリー状態は不明です。"
raw_input()
BatteryChargeStatusもPowerStatusと同様に列挙体なのですが、複数の状態(例えば、LowとChargihg)を示すことができます。これまた、Microsoftの記述を実際が異なります。C++をやっている人ならビット演算で切り抜けたいところですが、ビット演算の説明をするのが面倒なので文字列のfindメゾットで逃げてみました。
合わせるとスクリプトファイルと出力は次のようになります。
import clr
clr.AddReference('System.Windows.Forms')
from System.Windows.Forms import SystemInformation
from System.Windows.Forms import PowerLineStatus
ps = SystemInformation.PowerStatus
#電源に接続されているか
if ps.PowerLineStatus == PowerLineStatus.Online :
print "コンセントに接続されています。"
elif ps.PowerLineStatus == PowerLineStatus.Offline :
print "バッテリーを使用しています。"
elif ps.PowerLineStatus == PowerLineStatus.Unknown :
print "電源の状態がわかりません。"
#バッテリー残量
print "バッテリー残量:",ps.BatteryLifePercent *100,"%"
if ps.PowerLineStatus == PowerLineStatus.Offline :
if ps.BatteryLifeRemaining >0 :
print "バッテリーの残り時間:",ps.BatteryLifeRemaining/3600,":",
print ps.BatteryLifeRemaining/60 - ps.BatteryLifeRemaining/3600*60
#充電状態チェック
if ps.BatteryChargeStatus.ToString().find('High')>=0 :
print "バッテリー残量は十分あります。"
if ps.BatteryChargeStatus.ToString().find('Low')>=0 :
print "バッテリー残量が少ないです。"
if ps.BatteryChargeStatus.ToString().find('Critical')>=0 :
print "すぐに充電してください。"
if ps.BatteryChargeStatus.ToString().find('Charging')>=0 :
print "充電中です。"
if ps.BatteryChargeStatus.ToString().find('NoSystemBattery')>=0 :
print "バッテリーを使用していません。"
if ps.BatteryChargeStatus.ToString().find('Unknown')>=0 :
print "バッテリー状態は不明です。"
raw_input()
出力画面:
バッテリーを使用しています。
バッテリー残量: 85.0 %
バッテリーの残り時間: 1 : 12
バッテリー残量は十分あります。
↑こんな感じで表示されます。
今回はSystemInformationクラスから電源の情報を扱いましたが、調べてみるとWindowsのいろいろな設定情報が入手できそうです。もしスクリプトからWindowsの設定を調べたいときには、このSystemInformationクラスを覚えておくと役に立つかも知れません。