我有一个在Windows中读取电池状态的程序,看起来像这样(简化的代码):
#include <iostream>
#include <windows.h>
using namespace std;
int main(int argc, char *argv[]) {
SYSTEM_POWER_STATUS spsPwr;
if( GetSystemPowerStatus(&spsPwr) ) {
cout << "\nAC Status : " << static_cast<double>(spsPwr.ACLineStatus)
<< "\nBattery Status : " << static_cast<double>(spsPwr.BatteryFlag)
<< "\nBattery Life % : " << static_cast<double>(spsPwr.BatteryLifePercent)
<< endl;
return 0;
} else return 1;
}spsPwr.BatteryLifePercent保持电池剩余电量的百分比,并且是BYTE类型,这意味着它只能以舍入数字显示读数(即int)。我注意到一个名为BatteryBar的应用程序可以用浮点值显示电池百分比。
BatteryBar是一个.NET应用程序。如何使用纯C/C++和Windows API获取浮点/双精度格式的电池百分比读数?(最好是可以用MinGW编译的解决方案)
发布于 2011-10-16 23:32:26
您可以使用WMI获取此信息。尝试使用BatteryFullChargedCapacity和BatteryStatus类,它们都是root\WMI名称空间的一部分。
要获得剩余电池电量百分比,只需使用RemainingCapacity (BatteryStatus)和FullChargedCapacity (BatteryFullChargedCapacity)属性。
剩余电池电量百分比为
(RemainingCapacity * 100) / FullChargedCapacity
例如,如果FullChargedCapacity属性报告reuslt值,而RemainingCapacity报告5266,则RemainingCapacity将为95,68932776 %
如果您不知道如何从C++访问WMI,请阅读这些文章
WMI C++ Application Examples发布于 2011-10-16 23:06:26
正如你所说的Windows API provides only an integral percentage value。正如你所暗示的,还有.NET provides a floating-point one。
这意味着,要使用浮点数,你必须使用.NET,也就是说,.NET的值在0.0和1.0之间,从文档中还不清楚你是否真的获得了更高的精度。
发布于 2011-10-16 23:11:05
这个工具声明它做了"Statistical Time Prediction“,所以我怀疑它是否使用了SYSTEM_POWER_STATUS的直接值。
就我个人而言,我很难想象浮点精度会有什么好处,但不管怎样,你可以使用ILSpy来查看他们是如何做到这一点的,或者你也可以问他们是如何做到的。
https://stackoverflow.com/questions/7785096
复制相似问题