四联光电智能照明论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3127|回复: 0
打印 上一主题 下一主题

一个找了很久的API函数---GetSystemPowerStatus

[复制链接]
  • TA的每日心情
    开心
    2018-12-28 16:25
  • 817

    主题

    1556

    帖子

    1万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    14941
    跳转到指定楼层
    楼主
    发表于 2017-1-25 14:44:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
         昨天一不小心就发现了这个找了很久的一个API函数。过去一直想写一个判断笔记本是直流通电还是电池通电来写一个小程序,硬是没找到这个而终止了想法,今天发现了原来WindowsAPI还有这么好一个函数:GetSystemPowerStatus。
    一、简介
    GetSystemPowerStatus 函数返回系统电源的一个电量状态,这个状态显示系统是否运行在AC(交流电)或者DC(直流电)电流下。电池当前是否在充电或者电量的剩余使用时间。

    二、原型
    BOOL GetSystemPowerStatus(   
      LPSYSTEM_POWER_STATUS lpSystemPowerSatus // [out] Pointer to a SYSTEM_POWER_STATUS structure that receives status information.   
    );  

    SYSTEM_POWER_STATUS的定义:
    typedef struct _SYSTEM_POWER_STATUS {  
        BYTE ACLineStatus;            
        BYTE  BatteryFlag;            
        BYTE  BatteryLifePercent;      
        BYTE  Reserved1;               
        DWORD  BatteryLifeTime;        
        DWORD  BatteryFullLifeTime;   
    } SYSTEM_POWER_STATUS, *LPSYSTEM_POWER_STATUS;  

    三、参数说明
    ACLineStatus  交流电源状态
    Value    Meaning
    0       Offline
    1       Online
    255     Unknown status

    BatteryFlag  电池充电状态。 可以包含一或多个以下值
    Value    Meaning
    1       高,电量大于66%
    2       低,小于33%
    4       极低,小于5%
    8       充电中
    128     没有电池
    255     未知,无法读取状态

    BatteryLifePercent   电池还有百分之几能充满.0~100,若未知则为255
    Reserved1   保留,必须为0
    BatteryLifeTime   秒为单位的电池剩余电量, 若未知则为-1
    BatteryFullLifeTime   秒为单位的电池充满电的电量,若未知则为-1

    四、简单应用
    #include <Windows.h>  
    #include <iostream>  
    using namespace std;  
      
    int _tmain(int argc, _TCHAR* argv[])  
    {  
        SYSTEM_POWER_STATUS sysPowerStatus;  
        GetSystemPowerStatus(&sysPowerStatus);  
      
        cout<<"电源状态: "<<(int)sysPowerStatus.ACLineStatus<<endl;  
        cout<<"电池状态: "<<(int)sysPowerStatus.BatteryFlag<<endl;  
        cout<<"电量百分比: "<<(int)sysPowerStatus.BatteryLifePercent<<" %"<<endl;  
        cout<<"剩余能量: "<<sysPowerStatus.BatteryLifeTime<<" 秒"<<endl;  
        cout<<"总能量: "<<sysPowerStatus.BatteryFullLifeTime<<" 秒"<<endl;  
        return 0;  
    }  
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|Silian Lighting+ ( 蜀ICP备14004521号-1 )

    GMT+8, 2024-5-8 09:33 , Processed in 1.062500 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表