首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以浮点/双精度读取笔记本电脑电池状态

以浮点/双精度读取笔记本电脑电池状态
EN

Stack Overflow用户
提问于 2011-10-16 23:01:04
回答 4查看 8.5K关注 0票数 6

我有一个在Windows中读取电池状态的程序,看起来像这样(简化的代码):

代码语言:javascript
复制
#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编译的解决方案)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-10-16 23:32:26

您可以使用WMI获取此信息。尝试使用BatteryFullChargedCapacityBatteryStatus类,它们都是root\WMI名称空间的一部分。

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

剩余电池电量百分比为

(RemainingCapacity * 100) / FullChargedCapacity

例如,如果FullChargedCapacity属性报告reuslt值,而RemainingCapacity报告5266,则RemainingCapacity将为95,68932776 %

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

  • WMI C++ Application Examples
  • Making WMI Queries In C++
票数 3
EN

Stack Overflow用户

发布于 2011-10-16 23:06:26

正如你所说的Windows API provides only an integral percentage value。正如你所暗示的,还有.NET provides a floating-point one

这意味着,要使用浮点数,你必须使用.NET,也就是说,.NET的值在0.01.0之间,从文档中还不清楚你是否真的获得了更高的精度。

票数 1
EN

Stack Overflow用户

发布于 2011-10-16 23:11:05

这个工具声明它做了"Statistical Time Prediction“,所以我怀疑它是否使用了SYSTEM_POWER_STATUS的直接值。

就我个人而言,我很难想象浮点精度会有什么好处,但不管怎样,你可以使用ILSpy来查看他们是如何做到这一点的,或者你也可以问他们是如何做到的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7785096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档