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 を推定することしかできません。スマート バッテリ サブシステムがない場合、この値は有用なほど正確ではない可能性があります。