'전원'에 해당되는 글 2건

  1. 2008.09.06 전원 상태를 알아오는 SYSTEM_POWER_STATUS struct
  2. 2008.09.05 Windows Power management API - PBT_APMPOWERSTATUSCHANGE Event 1
2008. 9. 6. 10:24

전원 상태를 알아오는 SYSTEM_POWER_STATUS struct



'SYSTEM_POWER_STATUS' 는 Windows System에서 전력관리에 사용되는 구조체이다.

현재 동작하는 Windows System의 전원상태에 대한 정보를 담고 있다고 보면 된다. 전원에 대한 상태라는 것은 현재 사용하고 있는 전원이 AC인지 아니면 배터리를 사용하고 있는지에 대한 정보, 또 배터리를 사용하고 있다면 남아있는 배터리의 양이라든지 life time이라든지에 대한 정보를 말한다.

이녀석에 대한 정보를 가져오기 위해서는 'GetSystemPowerStatus()'라는 함수를 사용하게 된다. GetSystemPowerStatus()함수의 인자로 SYSTEM_POWER_STATUS가 사용되고, 현재 전원에 대한 상태정보를 인자로 사용된 이 구제체로 복사를 해오는 것이다.

현재 전원에 대한 상태정보를 알기 위해서 이 구조체를 사용하기만 하면된다.
Syntax를 보면 다음과 같다.
typedef struct _SYSTEM_POWER_STATUS {
BYTE ACLineStatus;
BYTE BatteryFlag;
BYTE BatteryLifePercent;
BYTE Reserved1;
DWORD BatteryLifeTime;
DWORD BatteryFullLifeTime;
} SYSTEM_POWER_STATUS, *LPSYSTEM_POWER_STATUS;
ACLineStatus
: AC power의 상태를 말한다. (0 : Offline, 1 : Online, 255 : Unknown status)

BatteryFlag
: 배터리의 charge status를 나타낸다.
  1    : High-the battery capacity is at more than 66 %
  2    : Low—the battery capacity is at less than 33 %
  4    : Critical—the battery capacity is at less than 5 %
  8    : Charging
  128 : No system battery
  255 : Unknown status—unable to read the battery flag information

BatteryLifePercent
남아있는 배터리의 양을 %로 표현한다. 0 ~ 100 사이의 값으로 표현되고, 상태를 알 수 없으면 255.

Reserved1
Reserved. must be zero

BatteryLifeTime
The number of seconds of battery life remaining, or -1 if remaining seconds are unknown.

BatteryFullLifeTime
The number of seconds of battery life when at full charge, or -1 if full battery lifetime is unknown.

참고 : MSDN
2008. 9. 5. 16:10

Windows Power management API - PBT_APMPOWERSTATUSCHANGE Event


Windows System에서 전력관리(Power management)를 위해 사용되는 API들이 있다. 지금 보게 될 'PBT_APMPOWERSTATUSCHANGE '라는 녀석도 그에 속한다.

'PBT_APMPOWERSTATUSCHANGE'는 사용하는 기계의 전원상태(power status)의 변화가 생길때 Windows system에서 어플리케이션에 전달(broadcast)되는 event 이다.
예를들어 노트북에서 AC전원을 사용하다가 전원코드를 뽑아서 배터리의 전원을 사용한다던지, 아님 그 반대든지.. 뭐 그런경우 시스템에서는 현재 사용하는 기계의 전원상태의 변화가 생김을 인지하고 이 이벤트를 날려준다(broadcasting).

이 이벤트는 'WM_POWERBROADCAST'라는 메시지를 통해서 어플리케이션에 전달되고, 해당하는 이벤트는 메시지의 'wParam'을 통해 전달된다.


사용방법은.. 대충 이렇다.
음.. Windows API를 예로들어 설명한다.(다른건 할줄몰라서.. 이것도.. 잘은.. -_-)

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
    HDC hdc;

    switch (iMessage) {
        ...
        case WM_POWERBROADCAST:
            switch(wParam){
            case PBT_APMPOWERSTATUSCHANGE:
                MessageBox(hWnd, TEXT("test"), TEXT("test"), MB_OK);
                return 0;
            }
        return 0;
        ...
    }
    return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}


추가로 WM_POWERBROADCAST 메시지의 wParam은 다음과 같은 것들이 있다.

Event

Meaning

PBT_APMBATTERYLOW

Battery power is low

PBT_APMOEMEVENT

OEM-defined event occurred

PBT_APMPOWERSTATUSCHANGE

Power status has changed

PBT_APMQUERYSUSPEND

Request for permission to suspend

PBT_APMQUERYSUSPENDFAILED

Suspension request denied

PBT_APMRESUMEAUTOMATIC

Operation resuming automatically after event

PBT_APMRESUMECRITICAL

Operation resuming after critical suspension

PBT_APMRESUMESUSPEND

Operation resuming after suspension

PBT_APMSUSPEND

System is suspending operation


여기를 참고하면 될 듯 하다.
WM_POWERBROADCAST : http://msdn.microsoft.com/en-us/library/aa373247.aspx
PBT_APMPOWERSTATUSCHANGE : http://msdn.microsoft.com/en-us/library/aa372715(VS.85).aspx