winform 中的电池状态
Battery Status in winforms
我一直在使用 perfmon 创建一个 winform 应用程序。我发现电池状态不起作用,因为它是 windows 管理的一部分。所以我决定走wmi路线。
所以我的问题是当我将电池状态放在标签中时如下所示:
private void BatteryStatus()
{
System.Management.ManagementClass wmi = new System.Management.ManagementClass("Win32_Battery");
var allBatteries = wmi.GetInstances();
foreach (var battery in allBatteries)
{
int estimatedChargeRemaining = Convert.ToInt32(battery["EstimatedChargeRemaining"]);
if (estimatedChargeRemaining == 100)
{
label13.Text = "Remaining:" + " " + estimatedChargeRemaining + " " + "%";
}
}
}
剩余电量显示完美。我的问题是,有没有一种方法可以让我只有一个 if statement
来调用电池状态从 100 到 1
或者我这样做的方式需要再做 99 次 if statements
?
这是我定制构建的性能监视器的一部分。如果 perfmon 允许计数器,那会更容易。这是我能想到的获取电池统计信息的唯一方法,例如:
Charge Rate
Discharge Rate
Remaining Capacity
Voltage
我一直if statements
使用电池状态标签。在我开始做 99 之前 if statements
我想确定没有更简单的方法吗?
*********** 更新 ************
我想到了。感谢那些帮助过的人的帮助。
我知道你想做的是:
private void BatteryStatus()
{
System.Management.ManagementClass wmi = new System.Management.ManagementClass("Win32_Battery");
var allBatteries = wmi.GetInstances();
foreach (var battery in allBatteries)
{
int estimatedChargeRemaining = Convert.ToInt32(battery["EstimatedChargeRemaining"]);
label13.Text = "Remaining:" + " " + estimatedChargeRemaining + " " + "%";
}
}
不需要和if
声明,无论百分比是多少标签都会更新。
在问题的第二部分,您说要显示 "battery status",然后您可以这样使用 if
:
private void BatteryStatus()
{
System.Management.ManagementClass wmi = new System.Management.ManagementClass("Win32_Battery");
var allBatteries = wmi.GetInstances();
foreach (var battery in allBatteries)
{
int estimatedChargeRemaining = Convert.ToInt32(battery["EstimatedChargeRemaining"]);
string Status = "";
if(estimatedChargeRemaining < 15) Status = "Critical";
else if(estimatedChargeRemaining < 35) Status = "Low";
else if(estimatedChargeRemaining < 60) Status = "Regular";
else if(estimatedChargeRemaining < 90) Status = "High";
else Status = "Complete";
label13.Text = "Remaining:" + " " + estimatedChargeRemaining + " " + "% | Status: " + Status;
}
}
private void BatteryStatus()
{
System.Management.ManagementClass wmi = new System.Management.ManagementClass("Win32_Battery");
var allBatteries = wmi.GetInstances();
foreach (var battery in allBatteries)
{
int estimatedChargeRemaining = Convert.ToInt32(battery["EstimatedChargeRemaining"]);
label13.Text = "Remaining" + " " + estimatedChargeRemaining.ToString() + " " + "%";
if (estimatedChargeRemaining < 15 )
{
label13.ForeColor = Color.Red;
}
}
}
我一直在使用 perfmon 创建一个 winform 应用程序。我发现电池状态不起作用,因为它是 windows 管理的一部分。所以我决定走wmi路线。
所以我的问题是当我将电池状态放在标签中时如下所示:
private void BatteryStatus()
{
System.Management.ManagementClass wmi = new System.Management.ManagementClass("Win32_Battery");
var allBatteries = wmi.GetInstances();
foreach (var battery in allBatteries)
{
int estimatedChargeRemaining = Convert.ToInt32(battery["EstimatedChargeRemaining"]);
if (estimatedChargeRemaining == 100)
{
label13.Text = "Remaining:" + " " + estimatedChargeRemaining + " " + "%";
}
}
}
剩余电量显示完美。我的问题是,有没有一种方法可以让我只有一个 if statement
来调用电池状态从 100 到 1
或者我这样做的方式需要再做 99 次 if statements
?
这是我定制构建的性能监视器的一部分。如果 perfmon 允许计数器,那会更容易。这是我能想到的获取电池统计信息的唯一方法,例如:
Charge Rate
Discharge Rate
Remaining Capacity
Voltage
我一直if statements
使用电池状态标签。在我开始做 99 之前 if statements
我想确定没有更简单的方法吗?
*********** 更新 ************ 我想到了。感谢那些帮助过的人的帮助。
我知道你想做的是:
private void BatteryStatus()
{
System.Management.ManagementClass wmi = new System.Management.ManagementClass("Win32_Battery");
var allBatteries = wmi.GetInstances();
foreach (var battery in allBatteries)
{
int estimatedChargeRemaining = Convert.ToInt32(battery["EstimatedChargeRemaining"]);
label13.Text = "Remaining:" + " " + estimatedChargeRemaining + " " + "%";
}
}
不需要和if
声明,无论百分比是多少标签都会更新。
在问题的第二部分,您说要显示 "battery status",然后您可以这样使用 if
:
private void BatteryStatus()
{
System.Management.ManagementClass wmi = new System.Management.ManagementClass("Win32_Battery");
var allBatteries = wmi.GetInstances();
foreach (var battery in allBatteries)
{
int estimatedChargeRemaining = Convert.ToInt32(battery["EstimatedChargeRemaining"]);
string Status = "";
if(estimatedChargeRemaining < 15) Status = "Critical";
else if(estimatedChargeRemaining < 35) Status = "Low";
else if(estimatedChargeRemaining < 60) Status = "Regular";
else if(estimatedChargeRemaining < 90) Status = "High";
else Status = "Complete";
label13.Text = "Remaining:" + " " + estimatedChargeRemaining + " " + "% | Status: " + Status;
}
}
private void BatteryStatus()
{
System.Management.ManagementClass wmi = new System.Management.ManagementClass("Win32_Battery");
var allBatteries = wmi.GetInstances();
foreach (var battery in allBatteries)
{
int estimatedChargeRemaining = Convert.ToInt32(battery["EstimatedChargeRemaining"]);
label13.Text = "Remaining" + " " + estimatedChargeRemaining.ToString() + " " + "%";
if (estimatedChargeRemaining < 15 )
{
label13.ForeColor = Color.Red;
}
}
}