id: 12030    nodeId: 12030    type: General    point: 125.0    linkPoint: 1.0    maker: cella    permission: linkable    made at: 2014.09.18 04:01    edited at: 2014.09.18 04:01
MS Windows 8 에서 sleep, hibernate

sleep 는 현 상태를 RAM 에 저장하고 hibernate 는 현 상태를 hard disk 에 저장한다. hybrid mode 는 RAM 과 hard disk 에 모두 저장한다.

한글 Windows 에서
"절전"은 기본적으로 hybrid mode 를 의미한다고 한다. (어쩌면 sleep 일지도 모른다.)
"최대절전"은 hibernate 를 의미한다.
"최대절전" 은 "전원" 아래에 기본적으로 나오는 메뉴 중에 들어있지 않다. 사용하고 싶으면 제어판에서 메뉴를 활성화시켜야 한다.

먼저 google 에서 찾아봤더니

1. 전원버튼이 기본적으로 shutdown 으로 지정돼 있는데 이것을 절전으로 지정하는 방법이 나온다. 제어판의 전원 관련 메뉴에서 가능함.
하지만 비상시에 hardware shutdown 이 필요할 수도 있으므로 이 방법은 좋지 않다.

2. rundll32.exe powrprof.dll,SetSuspendState 의 command 를 desktop 에 바로가기로 만드는 방법.
그런데 댓글 중에 powrprof.dll 나 SetSuspendState 를 rundll32 의 argument 로 넘겨주는 것은 stack 에 문제를 일으킬 확률이 있고 안전한 방법이 아니라는 것을 발견.

3. 다른 방법으로 psshutdown 을 사용하고 -d 나 -h 옵션을 사용하기를 권한다. 그런데 psshutdown 은 원래 들어있는 명령이 아니라 pstools 라는 것을 깔아야 한다. 불편하다.

4. 깔끔하게 프로그램을 짜기로 했다.

찾아보면 System.Windows.Forms.Application.SetSuspendState() 를 사용하여 프로그램을 쉽게 짜는 예제들이 있다.
C++ 로도 가능하다지만, 원래 찾은 예제가 C# 이어서 C# 을 이용해서 짜기로 함.

Visual Studio Express 켜고, C# 콘솔 프로그램 만드는 새 프로젝트, main 안에 SetSuspendState() 를 넣는다.
이 때 System.Windows.Forms 가 기본적으로 들어있지 않으므로, solution explorer 에서 프로젝트 위에 오른쪽 버튼 ->참조 추가 -> System.Windows.Forms 에 대한 참조 추가를 해 줘야 한다.

System.Windows.Forms.Application.SetSuspendState( System.Windows.Forms.PowerState.Suspend, False, False) 는 sleep 시킨다.
System.Windows.Forms.Application.SetSuspendState( System.Windows.Forms.PowerState.Hibernate, False, False) 는 hibernate 시킨다.

release 해서 .exe 파일들을 만들고, 바탕화면에 바로가기를 만든다.


Return to MS Windows 8 에서 sleep, hibernate