C# dotnet6 wpf バッテリー 充電状態 API

GetSystemPowerStatus

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

C# Form TextBox 追記時に 一番したまでスクロール

C# TextBox AppendText 下まで自動スクロール

C# Form アプリの TextBox を Multiline に設定し

AppendText()で文字を追記する場合に自動で一番したまでスクロールさせる

タイマーを使って textBox1に追記するコード

private void Timer_Tick(object? sender, EventArgs e)
{
	try
	{
		switch (iCount)
		{
			case 0:
				textBox1.AppendText($"BIGIN {iCount}{Environment.NewLine}");
				break;
			case 9:
				textBox1.AppendText($"END LINE {iCount}{Environment.NewLine}");
				(sender as System.Windows.Forms.Timer).Stop();
				break;
			default:
				textBox1.AppendText($"{iCount}{Environment.NewLine}");
				break;
		}
		iCount++;
	}
	catch(Exception e1)
	{
		System.Diagnostics.Debug.WriteLine(e1.Message);
	}
}

VisibleChanged時に、 一番したまでスクロールさせるコード

//textBox1.VisibleChanged += TextBox1_VisibleChanged;
private void TextBox1_VisibleChanged(object? sender, EventArgs e)
{
	try
	{
		if (textBox1.Visible)
		{
			textBox1.SelectionStart = textBox1.TextLength;
			textBox1.ScrollToCaret();
		}
	}
	catch (Exception e1)
	{
		System.Diagnostics.Debug.WriteLine(e1.Message);
	}
}
2022 MJELD TECHNOLOGIES. ALL RIGHTS RESERVED