读取浮动/双倍笔记本电脑电池状态

Boo*_*rap 5 c++ winapi power-management

我有一个程序可以读取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;
}
Run Code Online (Sandbox Code Playgroud)

spsPwr.BatteryLifePercent电池的剩余电量以百分比表示,属于类型BYTE,表示只能以整数显示读数(即int)。我注意到一个名为BatteryBar的应用程序可以在浮点值中显示电池百分比。

BatteryBar是一个.NET应用程序。如何使用带有Windows API的纯C / C ++以浮点/双精度获取电池百分比读数?(最好使用MinGW编译的解决方案)

RRU*_*RUZ 4

您可以使用 WMI 获取此信息。尝试使用BatteryFullChargedCapacity并且BatteryStatus类都是root\WMI命名空间的一部分。

要获取剩余电池电量百分比,只需使用 RemainingCapacity(BatteryStatus) 和FullChargedCapacity(BatteryFullChargedCapacity) 属性。

剩余电池电量百分比为

(剩余容量 * 100) / 已充满电容量

例如,如果 FullChargedCapacity 属性报告一个5266值,而 RemainingCapacity 报告 a 5039,则结果将是95,68932776 %

如果您不知道如何从 C++ 访问 WMI,请阅读这些文章