이것저것/My_Work

[MFC] - Power Policy Scheme

우담바라 2008. 9. 10. 17:54



Windows XP 에서 전력관리 프로그램을 제작 중이다.

테스트 중, 전원 관리 목록을 가져 오는 부분을 정리한다.

기본적으로 <PowrProf.h> 필요함으로 include 한다.


아래의 코드는 인터넷 검색을 하여 찾았으며,

정상 동작 하는 것을 확인 하였다.

굳이 함수를 바꾸지 않고 바로 호출하여 사용하여도 가능하다

일단 웹상의 코드를 그대로 첨부한다.

원문 : http://blog.naver.com/my_1028?Redirect=Log&logNo=50002603430

= 코드 =

- 선언부 -
typedef BOOLEAN (__stdcall *MYGetActivePwrScheme)(UINT *);
typedef BOOLEAN (__stdcall *MYGetCurrentPowerPolicies)(PGLOBAL_POWER_POLICY,PPOWER_POLICY);
typedef BOOLEAN (__stdcall *MYSetActivePwrScheme)(UINT, PGLOBAL_POWER_POLICY, PPOWER_POLICY);

#define ERROR_ROUTINE(hInstance){   FreeLibrary(hInstanc);\
                                                        hInstance=NULL;\
                                                        return;\
}


- 실제 코드 -

{

 MYGetActivePwrScheme pFunc1 = NULL;
 MYGetCurrentPowerPolicies pFunc2 = NULL;
 MYSetActivePwrScheme pFunc3 = NULL;

 HINSTANCE hInstance = NULL;

 hInstance = LoadLibrary(L"powrprof");

 if(hInstance)
 {
  pFunc1 = (MYGetActivePwrScheme)GetProcAddress(hInstance, "GetActivePwrScheme");
 
  if(pFunc1 ==NULL)
  {
   TRACE(L"GetActivePwrScheme Fail");
   //ERROR_ROUTINE(hInstance);
  }

  pFunc2 = (MYGetCurrentPowerPolicies)GetProcAddress(hInstance, (LPCSTR)"GetCurrentPowerPolicies");
  pFunc3 = (MYSetActivePwrScheme)GetProcAddress(hInstance, "SetActivePwrScheme");


  UINT uiActivePwrSchIndex;
  GLOBAL_POWER_POLICY stGlobalPwrPly;
  POWER_POLICY stPwrPly;
 

  if( ((pFunc1)(&uiActivePwrSchIndex)) == 0)
  {
   TRACE(L"Call GetActivePwrScheme Error");
  }

  if( ((pFunc2)(&stGlobalPwrPly, &stPwrPly)) == 0)
  {
   TRACE(L"Call GetCurrentPowerPolicies Error");
  }

  stPwrPly.user.IdleTimeOutAC = 0; //시스템 대기모드 해제

...

 FreeLibrary(hInstance);
 hInstance = NULL;
}


 
  stPwrPly.user.VideoTimeoutAc                     //모니터 끄기

  stPwrPly.user.SpindownTimeoutAc              //하드디스크 끄기

  stPwrPly.user.IdleTimeoutAc                       //시스템 대기 모드