반응형

이전 글에서 간략하게만 적었는데 바이오스의 버그 등으로 인해 윈도우의 최대 절전 모드가 동작하지 않는 경우가 있다.

 

이게 외않되?

 

이런 경우에 단순하게 명령창의 명령만으로 절전 모드에 진입시키는 것이 아예 불가능하다.

shutdown.exe 이건 rundll.exe powrprof.dll 이건 무엇 하나 기대대로 동작하지 않는다.

powrprof.dll을 활용해서 적절한 인자를 추가하여 최대 절전 모드 대신 절전 모드로 진입시키려 해도 제대로 되지 않는다.

shutdown.exe /h /f
rundll32.exe powrprof.dll SetSuspendState

 

정확한 메커니즘은 확인할 수 없었지만, 명령행에서 최대 절전 모드 대신 굳이 절전 모드로 진입하는 건 불가능해 보인다.

 

하지만, 아주 약간의 코드 만으로도 이 동작을 손쉽게 실행해볼 수 있다.

Visual C++에서는 아래의 한 줄이면 충분하다.

SetSuspendState(FALSE, FALSE, FALSE);

 

C#도 마찬가지.

Application.SetSuspendState(PowerState.Suspend, true, true);

 

위 함수에서 중요한 건 첫번째 인자다.

여기에 FALSE / PowerState.Suspend를 명시하면 절전 모드로 진입하게 된다.

당연한 얘기지만, TRUE면 최대 절전 모드를 의미한다.

 

참고로, 두 번째 인자는 사용되지 않고, 세 번째 인자는 깨우기 이벤트의 동작 유무다.

 

64비트 윈도우 용으로 컴파일 한 버전은 아래와 같다.

Go Sleep x64.rar
0.09MB

password: teus.me

 

덧1. 위 프로그램은 인텔 C/C++ 컴파일러로 빌드됐고, C++20을 적용했으나, 저 함수 하나 외엔 아무 기능도 쓰지 않음.

덧2. 인터넷을 뒤져보면 같은 동작을 하는 sleep.exe를 찾을 수 있는데, C#에서 같은 방식을 적용한 프로그램임

 

 

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band