전원제어 ? 전원관리 ?
Windows XP에서 테스트를 해본 관련 함수들을 정리.
: PostMessage(WM_SYSCOMMAND, SC_MONITORPOWER, 2 );
* Suspend Mode *
;SetSystemPowerState(true, false);
// 첫번째 Parameter의 값에 따라 suspend / hibernates 모드 변화, true => suspend, false => hirbernate
* Hibernates Mode *
SetSystemPowerState(false, false);
// 첫번째 Parameter의 값에 따라 suspend / hibernates 모드 변화, true => suspend, false => hirbernate
* Log Off *
ExitWindowsEx(EWX_LOGOFF|EWX_FORCEIFHUNG, SHTDN_REASON_FLAG_PLANNED); //LOG_OFF
* Power Off *
ExitWindowsEx ( EWX_SHUTDOWN | EWX_FORCE, SHTDN_REASON_MAJOR_OPERATINGSYSTEM
| SHTDN_REASON_MINOR_UPGRADE | SHTDN_REASON_FLAG_PLANNED);
=> 위와 같이 전원을 제어 하기 위해서는 현재 프로세서의 권한을 받아와야한다.
///////////////////////현재 프로세스 권한을 받아오는 소스///////////////////////////////////////
HANDLE hToken;
if (::OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken))
{
TOKEN_PRIVILEGES tkp;
//// Get the LUID for the shutdown privilege.
::LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1; // one privilege to set
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
// Get the shutdown privilege for this process.
::AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0);
::CloseHandle(hToken);
}
////////////////////////////////////////////////////////////////////////////////////////////////////
'이것저것 > My_Work' 카테고리의 다른 글
최대 절전 모드 오류 (0) | 2008.09.11 |
---|---|
[MFC] - Power Policy Scheme (0) | 2008.09.10 |
[MFC] - suspend모드로 전환하는 코드 (0) | 2008.09.02 |
[WINDOWS] - 명령을 입력하여 제어판 도구를 실행하는 방법 (0) | 2008.09.01 |
[Windows] - 최대 절전 모드 (0) | 2008.07.23 |