WM_ENDSESSION

인수

wParam : 셧다운되고 있는 중이면 TRUE이며 그렇지 않으면 FALSE이다. 이 값은 WM_QUERYENDSESSION 메시지의 리턴값과 같으며 TRUE이면 운영체제가 곧 종료된다는 뜻이다.

lParam : 로그오프를 하는 것인지 시스템 셧다운을 하는 것인지를 나타낸다. 이 값이 0이면 시스템을 완전히 종료하는 것이며 ENDSESSION_LOGOFF 플래그가 설정되어 있으면 로그오프만 하는 것이다. 이 값은 비트 필드이므로 반드시 & 연산자로 플래그의 존재 유무를 점검해야 한다.

if (lParam & ENDSESSION_LOGOFF) {
    // 로그오프 처리
} else {
    // 셧다운 처리
}

설명

운영체제는 종료되기 전에 실행중인 모든 프로그램에게 WM_QUERYENDSESSION 메시지를 보내 종료 허가를 받는다. 각 프로그램이 종료를 허가하면 WM_ENDSESSION 메시지를 보내 운영체제가 종료된다는 사실을 알려준다. 즉 이 메시지를 받았을 때는 이미 셧다운이 결정된 상태이며 더 이상 운영체제 종료를 거부할 수 없다.

응용 프로그램은 이 메시지를 받았을 때 미저장 문서, 설정 상태의 저장 등 필요한 동작을 해야 한다. 그러나 DestroyWindow로 메인 윈도우를 파괴하거나 PostQuitMessage 함수로 메시지 루프를 종료하는 등의 처리는 굳이 할 필요가 없다. 왜냐하면 운영체제가 종료되는 특수한 상황이기 때문에 자원 해제를 할 필요가 없기 때문이다. 물론 자기 자신을 완전히 종료한다고 해서 시스템 종료에 문제가 생기는 것은 아니지만 셧다운 속도가 느려지게 된다. 어차피 전원이 꺼지는 상황이므로 RAM에 남아 있는 윈도우, 프로세스는 그대로 방치해도 상관이 없다.

리턴

이 메시지를 처리했으면 0을 리턴한다.

예제

 

플랫폼

95이상

참조

WM_QUERYENDSESSION : 운영체제 종료 가능성을 질문하는 메시지이다.


written by http://www.winapi.co.kr