C# dotnet 6 WPFアプリで、 APIを使いバッテリー充電状態と電源接続状態を確認する。
コード例
kernel32.dll にある GetSystemPowerStatus()を使いました
[StructLayout(LayoutKind.Sequential)]
struct SYSTEM_POWER_STATUS
{
public byte ACLineStatus;
public byte BatteryFlag;
public byte BatteryLifePercent;
public byte SystemStatusFlag;
public int BatteryLifeTime;
public int BatteryFullLifeTime;
}
[DllImport("kernel32.dll")]
static extern bool GetSystemPowerStatus(out SYSTEM_POWER_STATUS lpSystemPowerStatus);
private void Button_Click(object sender, RoutedEventArgs e)
{
GetSystemPowerStatus(out var sYSTEM_POWER_STATUS);
ACLineStatus.Text = $"{sYSTEM_POWER_STATUS.ACLineStatus}"; // オンライン=1
BatteryFlag.Text = $"{sYSTEM_POWER_STATUS.BatteryFlag}"; // バッテリ充電状態
BatteryLifePercent.Text = $"{sYSTEM_POWER_STATUS.BatteryLifePercent}"; // バッテリ㌫
SystemStatusFlag.Text = $"{sYSTEM_POWER_STATUS.SystemStatusFlag}"; // バッテリー セーバーの状態
BatteryLifeTime.Text = $"{sYSTEM_POWER_STATUS.BatteryLifeTime}"; // バッテリーの残り秒数
BatteryFullLifeTime.Text = $"{sYSTEM_POWER_STATUS.BatteryFullLifeTime}";// フル充電時のバッテリー寿命の秒数
}
SYSTEM_POWER_STATUS メンバー
ACLineStatus
AC 電源の状態
値 |
内容 |
0 |
電源接続なし |
1 |
電源接続されている |
255 |
Unknown status |
BatteryFlag
バッテリーの充電状態
値 |
内容 |
1 |
高 – バッテリ容量が 66% を超えています |
2 |
低 – バッテリ容量が 33% 未満です |
4 |
重大 – バッテリ容量が 5% 未満です |
8 |
充電 |
128 |
システムバッテリーなし |
255 |
バッテリフラグ情報を読み取れない |
バッテリーが充電されておらず、バッテリー容量が低と高の間の場合、値はゼロです
BatteryLifePercent
バッテリのフル充電の残りのパーセンテージ。このメンバーは、0 から 100 の範囲の値、または状況が不明の場合は 255 です。
SystemStatusFlag
値 |
内容 |
0 |
バッテリーセーバーオフ |
1 |
バッテリーセーバーオン |
バッテリーセーバーについて
BatteryLifeTime
バッテリー寿命の残りの秒数。残りの秒数が不明な場合、またはデバイスが AC 電源に接続されている場合は -1。
BatteryFullLifeTime
フル充電時のバッテリー寿命の秒数、またはバッテリーのフル寿命が不明な場合、またはデバイスが AC 電源に接続されている場合は -1。
システムは、BatteryLifeTime と BatteryLifePercent の計算に基づいて BatteryFullLifeTime を推定することしかできません。スマート バッテリ サブシステムがない場合、この値は有用なほど正確ではない可能性があります。