none
시스템(OS) 종료를 감지 할 수 있는 방법이 있나요?? RRS feed

  • 질문

  • 프로그램을 실행 시켜 놓은 상태에서

    사용자가 OS를 종료 하거나 로그아웃 할때를 감지해서

    특정 일을 해주고 싶은데

    OS종료를 감지 할 수 있는 방법이 있나요??

    아 그리고...종료를 감지 하고 나서 OS종료를 기다리게 하고 일을 마친 다음에

    종료 할 수 있는지도 알려주세요...만약 감지 하는게 가능하다면요...

    winAPI 기반으로 프로그램을 만들고있습니다...



    • 편집됨 Ba_o 2016년 8월 24일 수요일 오전 2:07
    2016년 8월 24일 수요일 오전 1:54

답변

  • 가장 쉬운 방법은 WM_QUERYENDSESSION 메시지를 처리하는 것입니다.

    WM_QUERYENDSESSION 메시지는 OS가 셧다운 명령을 받았을 때 시스템이 각각의 애플리케이션에 보내는 메시지로

    하나의 애플리케이션이라도 WM_QUERYENDSESSION 핸들러가 FALSE를 반환하면 즉시 종료되지 않고 기다립니다.

    만약 OS가 셧다운 될 때 무언가를 해주고 종료하시려면

    WM_QUERYENDSESSION 메시지 핸들러에서 FALSE를 반환하시고,

    작업 수행 후 애플리케이션을 종료하시면 되겠네요.

    단, WM_QUERYENDSESSION 메시지 핸들러에서 FALSE를 반환했다 하더라도 타임아웃 시간이 있기 때문에

    무한정 기다려주진 않으니 신속히 작업 수행 후 애플리케이션을 종료해주셔야 합니다.

    • 답변으로 표시됨 Ba_o 2016년 8월 25일 목요일 오전 12:38
    2016년 8월 24일 수요일 오전 6:13
  • WM_QUERYENDSESSION 메시지에 바로 응답하지 않으면 일정 시간 후에 강제 종료될 수 있으므로

    FALSE를 반환한 다음 작업 처리 후 스스로 종료하는 것이 더 좋을 것 같습니다.

    2016년 8월 25일 목요일 오전 12:23

모든 응답

  • 가장 쉬운 방법은 WM_QUERYENDSESSION 메시지를 처리하는 것입니다.

    WM_QUERYENDSESSION 메시지는 OS가 셧다운 명령을 받았을 때 시스템이 각각의 애플리케이션에 보내는 메시지로

    하나의 애플리케이션이라도 WM_QUERYENDSESSION 핸들러가 FALSE를 반환하면 즉시 종료되지 않고 기다립니다.

    만약 OS가 셧다운 될 때 무언가를 해주고 종료하시려면

    WM_QUERYENDSESSION 메시지 핸들러에서 FALSE를 반환하시고,

    작업 수행 후 애플리케이션을 종료하시면 되겠네요.

    단, WM_QUERYENDSESSION 메시지 핸들러에서 FALSE를 반환했다 하더라도 타임아웃 시간이 있기 때문에

    무한정 기다려주진 않으니 신속히 작업 수행 후 애플리케이션을 종료해주셔야 합니다.

    • 답변으로 표시됨 Ba_o 2016년 8월 25일 목요일 오전 12:38
    2016년 8월 24일 수요일 오전 6:13
  • case WM_QUERYENDSESSION: 실행하고 싶은 함수(); return TRUE;

    이런식으로 코드를 작성하게 되면 함수를 실행하고 TURE값을 반환화면서

    OS가 종료 되게 할 수 있는건가요??

    2016년 8월 24일 수요일 오전 8:45
  • WM_QUERYENDSESSION 메시지에 바로 응답하지 않으면 일정 시간 후에 강제 종료될 수 있으므로

    FALSE를 반환한 다음 작업 처리 후 스스로 종료하는 것이 더 좋을 것 같습니다.

    2016년 8월 25일 목요일 오전 12:23