home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1998 November / VPR9811A.BIN / VPR_DATA / Program / Ce / Battery.c < prev    next >
C/C++ Source or Header  |  1998-09-04  |  5KB  |  163 lines

  1. //
  2. //    Battery.c
  3. //
  4. #include    <windows.h>
  5. #include    "resource.h"
  6.  
  7. //----------------------------------------------------------------------------
  8. BOOL DisplayBatteryStatus(
  9.         HWND    hWnd,
  10.         PAINTSTRUCT * ps)
  11. //----------------------------------------------------------------------------
  12. {
  13.     SYSTEM_POWER_STATUS_EX SysStatus;
  14.     RECT    rc;
  15.     TCHAR    szWork[80];
  16.     INT        i;
  17.     TCHAR    szUnknown[] = TEXT("不明");
  18.     const LPCTSTR    pszACLineStatus[3] = {
  19.         TEXT("メインバッテリ"),TEXT("外部電源"),szUnknown
  20.     };
  21.     const LPCTSTR    pszBatteryStatus[6] = {
  22.         TEXT("OK"),TEXT("少ない"),TEXT("残りわずか"),
  23.         TEXT("充電中"),TEXT("接続なし"),szUnknown
  24.     };
  25.  
  26.     // Get power status of the system
  27.     if(GetSystemPowerStatusEx(&SysStatus, TRUE) != TRUE)
  28.         return FALSE;
  29.  
  30.     GetClientRect(hWnd, &rc);
  31.  
  32.     rc.left   = 200;
  33.     rc.top    = 30;
  34.     rc.right  = rc.left + 199;
  35.     rc.bottom = rc.top + 14;
  36.     // AC Line Status:
  37.     // is the machine connected to the mains?
  38.     i = (SysStatus.ACLineStatus > 1)? 2:SysStatus.ACLineStatus;
  39.     wsprintf(szWork, TEXT("使用中電源\t: %s"), pszACLineStatus[i]);
  40.     DrawText(ps->hdc, szWork, -1, &rc, DT_LEFT | DT_EXPANDTABS);
  41.  
  42.     rc.top += 15;
  43.     rc.bottom = rc.top + 14;
  44.     DrawText(ps->hdc, TEXT("《メインバッテリ》"), -1, &rc, DT_LEFT | DT_EXPANDTABS);
  45.  
  46.     rc.top += 15;
  47.     rc.bottom = rc.top + 14;
  48.     // what's the current battery charge status?
  49.     if(SysStatus.BatteryFlag == 255)
  50.     {
  51.         i = 5;
  52.     }
  53.     else
  54.     {
  55.         BYTE    BatteryFlag = SysStatus.BatteryFlag;
  56.         for(i = 0; i < 8; i++, BatteryFlag >>= 1)
  57.         {
  58.             if(BatteryFlag & 1)
  59.                 break;
  60.         }
  61.         if(i > 4) i = 4;
  62.     }
  63.     wsprintf(szWork, TEXT("バッテリ状態\t: %s"), pszBatteryStatus[i]);
  64.     DrawText(ps->hdc, szWork, -1, &rc, DT_LEFT | DT_EXPANDTABS);
  65.  
  66.     // % battery life remaining.
  67.     rc.top += 15;
  68.     rc.bottom = rc.top + 14;
  69.     wcscpy(szWork, TEXT("残量比率\t: "));
  70.     if(SysStatus.BatteryLifePercent == 255)
  71.         wcscat(szWork, szUnknown);
  72.     else
  73.         wsprintf(&szWork[wcslen(szWork)], TEXT("%d%%"), SysStatus.BatteryLifePercent);
  74.     DrawText(ps->hdc, szWork, -1, &rc, DT_LEFT | DT_EXPANDTABS);
  75.  
  76.     // number of seconds of battery life remaining
  77.     rc.top += 15;
  78.     rc.bottom = rc.top + 14;
  79.     wcscpy(szWork, TEXT("残り時間\t: "));
  80.     if(SysStatus.BatteryLifeTime == 0xFFFFFFFF)
  81.         wcscat(szWork, szUnknown);
  82.     else
  83.         wsprintf(&szWork[wcslen(szWork)], TEXT("%d時間%d分%d秒"),
  84.         SysStatus.BatteryLifeTime/(60*60), SysStatus.BatteryLifeTime%(60*60)/60, SysStatus.BatteryLifeTime%60);
  85.     DrawText(ps->hdc, szWork, -1, &rc, DT_LEFT | DT_EXPANDTABS);
  86.  
  87.     // total number of seconds of battery life
  88.     rc.top += 15;
  89.     rc.bottom = rc.top + 14;
  90.     wcscpy(szWork, TEXT("総駆動時間\t: "));
  91.     if(SysStatus.BatteryFullLifeTime == 0xFFFFFFFF)
  92.         wcscat(szWork, szUnknown);
  93.     else
  94.         wsprintf(&szWork[wcslen(szWork)], TEXT("%d時間%d分%d秒"),
  95.         SysStatus.BatteryFullLifeTime/(60*60), SysStatus.BatteryFullLifeTime%(60*60)/60, SysStatus.BatteryFullLifeTime%60);
  96.     DrawText(ps->hdc, szWork, -1, &rc, DT_LEFT | DT_EXPANDTABS);
  97.  
  98.     rc.top += 15;
  99.     rc.bottom = rc.top + 14;
  100.     DrawText(ps->hdc, TEXT("《バックアップバッテリ》"), -1, &rc, DT_LEFT | DT_EXPANDTABS);
  101.  
  102.     rc.top += 15;
  103.     rc.bottom = rc.top + 14;
  104.     switch (SysStatus.BackupBatteryFlag)
  105.     {
  106.     case BATTERY_FLAG_HIGH:
  107.         i = 0;
  108.         break;
  109.     case BATTERY_FLAG_LOW:
  110.         i = 1;
  111.         break;
  112.     case BATTERY_FLAG_CRITICAL:
  113.         i = 2;
  114.         break;
  115.     case BATTERY_FLAG_CHARGING:
  116.         i = 3;
  117.         break;
  118.     case BATTERY_FLAG_NO_BATTERY:
  119.         i = 4;
  120.         break;
  121.     case BATTERY_FLAG_UNKNOWN:
  122.     default:
  123.         i = 5;
  124.         break;
  125.     }
  126.     wsprintf(szWork, TEXT("バッテリ状態\t: %s"), pszBatteryStatus[i]);
  127.     DrawText(ps->hdc, szWork, -1, &rc, DT_LEFT | DT_EXPANDTABS);
  128.  
  129.     // % backup battery life remaining.
  130.     rc.top += 15;
  131.     rc.bottom = rc.top + 14;
  132.     wcscpy(szWork, TEXT("残量比率\t: "));
  133.     if(SysStatus.BackupBatteryLifePercent == BATTERY_PERCENTAGE_UNKNOWN)
  134.         wcscat(szWork, szUnknown);
  135.     else
  136.         wsprintf(&szWork[wcslen(szWork)], TEXT("%d%%"), SysStatus.BackupBatteryLifePercent);
  137.     DrawText(ps->hdc, szWork, -1, &rc, DT_LEFT | DT_EXPANDTABS);
  138.  
  139.     // number of seconds of backup battery life remaining
  140.     rc.top += 15;
  141.     rc.bottom = rc.top + 14;
  142.     wcscpy(szWork, TEXT("残り時間\t: "));
  143.     if(SysStatus.BackupBatteryLifeTime == BATTERY_LIFE_UNKNOWN)
  144.         wcscat(szWork, szUnknown);
  145.     else
  146.         wsprintf(&szWork[wcslen(szWork)], TEXT("%d時間%d分%d秒"),
  147.         SysStatus.BackupBatteryLifeTime/(60*60), SysStatus.BackupBatteryLifeTime%(60*60)/60, SysStatus.BackupBatteryLifeTime%60);
  148.     DrawText(ps->hdc, szWork, -1, &rc, DT_LEFT | DT_EXPANDTABS);
  149.  
  150.     // total number of seconds of backup battery life
  151.     rc.top += 15;
  152.     rc.bottom = rc.top + 14;
  153.     wcscpy(szWork, TEXT("総駆動時間\t: "));
  154.     if(SysStatus.BackupBatteryFullLifeTime == BATTERY_LIFE_UNKNOWN)
  155.         wcscat(szWork, szUnknown);
  156.     else
  157.         wsprintf(&szWork[wcslen(szWork)], TEXT("%d時間%d分%d秒"),
  158.         SysStatus.BackupBatteryFullLifeTime/(60*60), SysStatus.BackupBatteryFullLifeTime%(60*60)/60, SysStatus.BackupBatteryFullLifeTime%60);
  159.     DrawText(ps->hdc, szWork, -1, &rc, DT_LEFT | DT_EXPANDTABS);
  160.  
  161.     return TRUE;
  162. }
  163.