HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2020
0130
クリーパーバッテリーの存在確認3解決


クリーパー

リンク

2020/1/30(Thu) 06:31:45|NO.89366

このスレッドを見ていただきありがとうございます!
今回、バッテリー情報を取得するサンプルを使って電源の状態を取得しようと思ったのですが、
わからない点があったのでご質問させていただきます。
まず、自分が作りたいのは、バッテリーを搭載しているパソコンなどではバッテリーの数値を表示して
デスクトップなどではAC電源の接続状況だけを取得したいと思っています。
しかし、バッテリーが存在するか確認する方法がわかりません。
お分かりになる方はお教えいただけると嬉しいです。



この記事に返信する


あらや

リンク

2020/1/30(Thu) 13:12:09|NO.89370

APIのGetSystemPowerStatusという、電源の情報を取得する関数を使うとわかります。


#uselib "kernel32.dll" #func GetSystemPowerStatus "GetSystemPowerStatus" var dim lpSystemPowerStatus, 2; GetSystemPowerStatus lpSystemPowerStatus; // バッテリーの情報取得 ACLineStatus = lpSystemPowerStatus(0) & 0xFF; // AC電源の状態 BatteryFlag = (lpSystemPowerStatus(0) >> 8) & 0xFF; // 充電状態 BatteryLifePercent = (lpSystemPowerStatus(0) >> 16) & 0xFF; // 電源の残りの割合 BatteryLifeTime = lpSystemPowerStatus(1) & 0xFFFF; // バッテリーの残り時間(秒) BatteryFullLifeTime = (lpSystemPowerStatus(1) >> 16) & 0xFFFF; // フル充電時のバッテリーの寿命(秒) if( BatteryFullLifeTime == 0xFFFF ) : BatteryFullLifeTime = -1; // 寿命が不明な場合は-1 if( ACLineStatus == 0 ) { mes "AC電源がオフライン(電源に接続していない)"; } else: if( ACLineStatus == 1 ) { mes "AC電源がオンライン(電源に接続している)"; } else: if( ACLineStatus == 2 ) { mes "AC電源の状態が不明"; } if( BatteryFlag & 1 ) { mes "バッテリー状態:高(66%よりも上)"; } if( BatteryFlag & 2 ) { mes "バッテリー状態:低(33%よりも下)"; } if( BatteryFlag & 4 ) { mes "バッテリー状態:危機的(5%よりも下)"; } if( BatteryFlag & 8 ) { mes "バッテリー状態:充電中"; } if( BatteryFlag & 128 ) { mes "バッテリー状態:バッテリーが無い(デスクトップPC)"; } if( BatteryFlag & 256 ) { mes "バッテリー状態:不明"; } mes "バッテリーの残量:"+BatteryLifePercent+"%";
BatteryFlagが128の場合はデスクトップPCです。



あらや

リンク

2020/1/30(Thu) 14:01:49|NO.89371

すみません間違えました……

8ビットの変数(BatteryFlag)で256はあり得なかったですね……
ついでにACLineStatusも公式の説明に合わせた数値に変更しました。


#uselib "kernel32.dll" #func GetSystemPowerStatus "GetSystemPowerStatus" var dim lpSystemPowerStatus, 2; GetSystemPowerStatus lpSystemPowerStatus; // バッテリーの情報取得 ACLineStatus = lpSystemPowerStatus(0) & 0xFF; // AC電源の状態 BatteryFlag = (lpSystemPowerStatus(0) >> 8) & 0xFF; // 充電状態 BatteryLifePercent = (lpSystemPowerStatus(0) >> 16) & 0xFF; // 電源の残りの割合 BatteryLifeTime = lpSystemPowerStatus(1) & 0xFFFF; // バッテリーの残り時間(秒) BatteryFullLifeTime = (lpSystemPowerStatus(1) >> 16) & 0xFFFF; // フル充電時のバッテリーの寿命(秒) if( BatteryFullLifeTime == 0xFFFF ) : BatteryFullLifeTime = -1; // 寿命が不明な場合は-1 if( ACLineStatus == 0 ) { mes "AC電源がオフライン(電源に接続していない)"; } else: if( ACLineStatus == 1 ) { mes "AC電源がオンライン(電源に接続している)"; } else: if( ACLineStatus == 255 ) { mes "AC電源の状態が不明"; } if( BatteryFlag & 1 ) { mes "バッテリー状態:高(66%よりも上)"; } if( BatteryFlag & 2 ) { mes "バッテリー状態:低(33%よりも下)"; } if( BatteryFlag & 4 ) { mes "バッテリー状態:危機的(5%よりも下)"; } if( BatteryFlag & 8 ) { mes "バッテリー状態:充電中"; } if( BatteryFlag == 128 ) { mes "バッテリー状態:バッテリーが無い(デスクトップPC)"; } if( BatteryFlag == 255 ) { mes "バッテリー状態:不明"; } mes "バッテリーの残量:"+BatteryLifePercent+"%";



クリーパー

リンク

2020/1/30(Thu) 17:06:57|NO.89374

動きました、お教えいただき有難うございました!



ONION software Copyright 1997-2023(c) All rights reserved.