電源のステータスを取得する方法【Windows API】

商用電源(コンセント)からの給電で動作しているかバッテリー動作かの判定を行います。 バッテリー動作時はバッテリーの基本的なステータスが取得できます。基本的にバッテリー残量は目安にしかなりません。 このAPIはNT4には存在しないAPIですので注意してください。 Windows98では正常に動作しない可能性があります

int main(int argc, char* argv[])
{
    SYSTEM_POWER_STATUS sps;

    if (GetSystemPowerStatus(&sps)) {

        // 商用電源(コンセント)に繋がれているかどうか?
        if     (sps.ACLineStatus == AC_LINE_OFFLINE) {
            printf("[商用電源] オフライン\n");
        } else if (sps.ACLineStatus == AC_LINE_ONLINE) {
            printf("[商用電源] オンライン\n");
        } else if (sps.ACLineStatus == AC_LINE_BACKUP_POWER) {
            printf("[商用電源] バックアップ\n");
        } else {
            printf("[商用電源] 不明\n");
        }

        // バッテリーのステータス
        if        (sps.BatteryFlag == BATTERY_FLAG_HIGH) {
            printf("[バッテリー状態] 良好\n");
        } else if (sps.BatteryFlag == BATTERY_FLAG_LOW) {
            printf("[バッテリー状態] 不足\n");
        } else if (sps.BatteryFlag == BATTERY_FLAG_CRITICAL) {
            printf("[バッテリー状態] 危険\n");
        } else if (sps.BatteryFlag == BATTERY_FLAG_CHARGING) {
            printf("[バッテリー状態] 充電中\n");
        } else if (sps.BatteryFlag == BATTERY_FLAG_NO_BATTERY) {
            printf("[バッテリー状態] 未搭載\n");
        } else {
            printf("[バッテリー状態] 不明\n");
        }

        // バッテリーの充電容量が取得できた場合は表示する
        if (sps.BatteryLifePercent != BATTERY_PERCENTAGE_UNKNOWN) {
            printf("[バッテリー残量] %d%%\n", sps.BatteryLifePercent);
        }

        // バッテリーの稼働時間が取得できた場合は表示する
        if (sps.BatteryLifeTime != BATTERY_LIFE_UNKNOWN) {
            printf("[バッテリー稼働時間] %d[s]\n", sps.BatteryLifePercent);
        }

        // バッテリー自体の性能
        if (sps.BatteryFullLifeTime != BATTERY_LIFE_UNKNOWN) {
            printf("[バッテリー基本性能] %d[s]\n", sps.BatteryLifePercent);
        }

    }

    return 0;
}

 

Windows API

Posted by @erestage