プログラミングのメモ帳(C/C++/HSP)

日々のプログラミングで気づいた点や小技集を紹介します。(Windows 10/XP/Vista、VC2017、HSP)

電源状態の取得

2007年12月01日 10時12分00秒 | システム関連

次の電源状態が取得できます。(戻る)

  1. AC電源か、DC電源か分かる。
  2. バッテリ(DC電源)のときに充電中か、放電中か分かる。
  3. バッテリ(DC電源)の残量をパーセントや時間で分かる。

プロトタイプ宣言

BOOL GetSystemPowerStatus(
    LPSYSTEM_POWER_STATUS   lpSystemPowerStatus     // SYSTEM_POWER_STATUS 構造体へのポインタ
);

構造体

typedef struct _SYSTEM_POWER_STATUS {
    BYTE    ACLineStatus;           // AC電源状態
    BYTE    BatteryFlag;            // DC電源状態
    BYTE    BatteryLifePercent;     // DC電源残量(%)
    BYTE    Reserved1;              // 予約
    DWORD   BatteryLifeTime;        // DC残り維持時間(秒)
    DWORD   BatteryFullLifeTime;    // DCフル維持時間(秒)
} SYSTEM_POWER_STATUS,  *LPSYSTEM_POWER_STATUS;

サンプル

#include <stdio.h>
#include <windows.h>

// メイン関数
int main( void )
{
    SYSTEM_POWER_STATUS sps;
    LPCTSTR             lpAC;
    LPCTSTR             lpDC;
    
    if ( GetSystemPowerStatus(&sps) ){
        // AC電源の状態
        switch ( sps.ACLineStatus ){
            case AC_LINE_OFFLINE:           lpAC = TEXT("オフライン");      break;
            case AC_LINE_ONLINE:            lpAC = TEXT("オンライン");      break;
            case AC_LINE_BACKUP_POWER:      lpAC = TEXT("バックアップ");    break;
            default:                        lpAC = TEXT("不明");            break;
        }
        // DC電源の状態
        switch ( sps.BatteryFlag ){
            case BATTERY_FLAG_HIGH:         lpDC = TEXT("良好");            break;
            case BATTERY_FLAG_LOW:          lpDC = TEXT("不足");            break;
            case BATTERY_FLAG_CRITICAL:     lpDC = TEXT("危険");            break;
            case BATTERY_FLAG_CHARGING:     lpDC = TEXT("充電中");          break;
            case BATTERY_FLAG_NO_BATTERY:   lpDC = TEXT("未搭載");          break;
            default:                        lpDC = TEXT("不明");            break;
        }
        printf( TEXT("AC電源状態:%s\n"), lpAC );
        printf( TEXT("DC電源状態:%s\n"), lpDC );
        
        // 充電残量のパーセント(%)
        if ( sps.BatteryLifePercent == BATTERY_PERCENTAGE_UNKNOWN ){
            printf( TEXT("DC電源残量:不明\n") );
        }
        else{
            printf( TEXT("DC電源残量:%d%%\n"), sps.BatteryLifePercent );
        }
        // 残り維持時間(秒)
        if ( sps.BatteryLifeTime == BATTERY_LIFE_UNKNOWN ){
            printf( TEXT("残り維持時間:不明\n") );
        }
        else{
            printf( TEXT("残り維持時間:%u秒\n"), sps.BatteryLifeTime );
        }
        // フル維持時間(秒)
        if ( sps.BatteryFullLifeTime == BATTERY_LIFE_UNKNOWN ){
            printf( TEXT("フル維持時間:不明\n") );
        }
        else{
            printf( TEXT("フル維持時間:%u秒\n"), sps.BatteryFullLifeTime );
        }
        return 0;
    }
    printf( TEXT("システムの電源状態を取得できません。\n") );
    return 1;
}
  • Windows 2000 以降で動作します。
  • Windows 98 ではコントロールパネルの『電源の管理』の設定により上手く動作しない場合があります。

実行結果

AC電源状態:オンライン
DC電源状態:未搭載
DC電源残量:不明
残り維持時間:不明
フル維持時間:不明
  • デスクトップのパソコンなのでバッテリ情報は表示されません。
  • ノートパソコンなどの機種ならバッテリ情報が表示されると思います。

関連記事



コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« コンピュータのロック | トップ | ごみ箱のクリア »
最新の画像もっと見る

コメントを投稿

システム関連」カテゴリの最新記事