SW 개발

[winCE/WM] 배터리 상태얻어오기 예제

. . . 2014. 8. 29. 12:39
반응형
  • 출처 : CE 나 WM 에서 배터리의 상태를 얻어올때 간단하게 짯던 프로그램을 메모한다.

예제코드

WM / winCE 배터리상태 얻어오기

void xenostudy_test::OnBatterystatus() 
{
  SYSTEM_POWER_STATUS_EX2 pows = { 0, };  
  DWORD dwReturn = FALSE;

  // 세번째 인자로 FALSE를 사용하면, 캐시된 값을 가져오게 됩니다.
  // 실제 배터리 값과 약간의 차이가 있겠지만, 최대 오차는 5초 이전의 값이므로 문제없는듯
  // TRUE를 사용할 경우, 불필요한 성능 저하를 가져올 수 있으므로 FALSE를 권장한다.

  dwReturn = GetSystemPowerStatusEx2( &pows, sizeof( pows ), FALSE );

  if( dwReturn == 0 )
  {
    // 배터리정보 갖고올수없음 
    UpdateData(FALSE);
    return;
  }

  CString strTotal, strMessage, strDesc;

  // 외부 전원 사용중 체크 

  if( pows.ACLineStatus == 0 ) 
    //배터리 전원사용
  else if ( pows.ACLineStatus == 1 )
    //외부전원 사용
  else if ( pows.ACLineStatus == 255 )
    // 알수없는상태
  else
    // 오류

  if(pows.BatteryFlag == BATTERY_FLAG_UNKNOWN)
    // 오류

  else if(pows.BatteryFlag & BATTERY_FLAG_CHARGING)
    // 충전중

  else
  {
    if(pows.BatteryFlag & BATTERY_FLAG_HIGH)
      // 배터리 충분
    if(pows.BatteryFlag & BATTERY_FLAG_LOW)
      // 배터리 부족
    if(pows.BatteryFlag & BATTERY_FLAG_CRITICAL)
      // 배터리 매우부족
  }

  strMessage.Format( _T( " 배터리 상태 : %s - %d %%\r\n" ), strDesc, pows.BatteryLifePercent); 
  strTotal += strMessage; 

  // BatteryVoltage
  strMessage.Format( _T( " 배터리 전압 : %d (mV) \r\n" ), pows.BatteryVoltage);


  // BatteryChemistry

  if( pows.BatteryChemistry == BATTERY_CHEMISTRY_ALKALINE )
    strDesc = _T( "Alkaline" );
  else if( pows.BatteryChemistry == BATTERY_CHEMISTRY_NICD )
    strDesc = _T( "Lickel Cadmium" );
  else if( pows.BatteryChemistry == BATTERY_CHEMISTRY_NIMH )
    strDesc = _T( "Nickel Metal Hydride" );
  else if( pows.BatteryChemistry == BATTERY_CHEMISTRY_LION )
    strDesc = _T( "Lithium Ion" );
  else if( pows.BatteryChemistry == BATTERY_CHEMISTRY_LIPOLY )
    strDesc = _T( "Lithium Polymer" );
  else if( pows.BatteryChemistry == BATTERY_CHEMISTRY_UNKNOWN )
    strDesc = _T( "Unknown" );

  strMessage.Format( _T( " 배터리 특성 : %s\r\n" ), strDesc );
  strTotal += strMessage; 

  // BackupBatteryFlag
  if(pows.BackupBatteryFlag == BATTERY_FLAG_NO_BATTERY)
    strDesc = _T( "배터리없음" );

  else if(pows.BackupBatteryFlag == BATTERY_FLAG_UNKNOWN)
    strDesc = _T( "오류" );

  else if(pows.BackupBatteryFlag & BATTERY_FLAG_CHARGING)
    strDesc = _T( "충전중" );

  else
  {
    if(pows.BackupBatteryFlag & BATTERY_FLAG_HIGH)
      strDesc = _T("충분");
    if(pows.BackupBatteryFlag & BATTERY_FLAG_LOW)
      strDesc = _T("부족");
    if(pows.BackupBatteryFlag & BATTERY_FLAG_CRITICAL)
      strDesc = _T("매우부족");
}

  strMessage.Format( _T( " 보조 배터리 상태 : %s - %d %%\r\n" ), strDesc, pows.BackupBatteryLifePercent);
  strTotal += strMessage; 
  strMessage.Format( _T( " 보조 배터리 전압 : %d(mV)\r\n" ), pows.BackupBatteryVoltage);
  strTotal += strMessage; 

  m_strBatteryPanel = strTotal;
  UpdateData(FALSE);
}
반응형