반응형
- 출처 : 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);
}
반응형