Windows 7 (및 아마도 Vista/8/Server에서도) 시스템 이벤트를 사용하여 Windows가 종료되는지 (컴퓨터 전원이 꺼져 있는지) 또는 다시 시작되는지 여부를 추적 할 수 있습니다. Windows 7은 종료/재부팅이 시작될 때마다 (시작 메뉴의 단추 또는 프로그래밍 방식으로 단추를 클릭 할 때마다) 시스템 로그, 소스 USER32, 이벤트 ID 1074에 하나 또는 두 개의 이벤트를 기록합니다. 관리 도구에서 이벤트 뷰어를 엽니 다 (시스템 로그를 필터링하여 ID 1074 만 표시). 이러한 이벤트의 설명 (메시지)에는 종료 유형이 들어 있습니다. 따라서이 유형의 가장 최근 이벤트 (종료가 시작된 후)의 설명을 구문 분석하여 필요한 단어 (종료, 재부팅/다시 시작)를 찾을 수 있습니다.
정상적으로 Windows를 종료하기 위해 전원 단추를 사용할 때 (일반적으로이 기능을 사용하지 않도록 설정) 이벤트에 기록 된 종료 유형을 보려고하지 않았지만 일부 사이트에서는 "전원 꺼짐"대신 "종료"- 당신이 확신 할 필요가 있다면 그것을 확인하십시오. 또는 단순히 "재부팅"유형을 찾으십시오. 발견되지 않으면 "종료"유형이 사용됩니다.
내 경험에 비추어 볼 때, 이벤트/1074는 프로그래밍 방식으로 (예 : 프로그램 설치 또는 shutdown.exe 유틸리티를 사용하여) 시스템 종료/재부팅을 수행 한 경우에만 기록됩니다. 따라서 셸 (Explorer)에서 시작된 종료를 등록하지는 않지만이 방법을 다른 대답에서 제안 된대로 레지스트리의 값을 읽는 것과 결합 할 수 있습니다. 또한 WinXP에서 이벤트 1074의 메시지에는 실제 종료 유형이 무엇이든 관계없이 "restart"라는 단어가 포함되어 있으므로 "Shutdown Type :"필드를 살펴보고 "shutdown"또는 "재부팅".
이와 관련하여 Windows가 어떤 이유 (예 : 응용 프로그램이 WM_QUERYENDSESSION에 대한 응답으로 종료를 허용하지 않는 경우)로 인해 시스템 종료/재부팅에 실패 할 때마다 이벤트 ID 1073이 기록됩니다. 이 경우 메시지에는 WinXP에서 "shutdown", "reboot"또는 "power off"와 같은 단어가 포함됩니다. Win7의 경우이 유형의 이벤트는 종료와 재부팅간에 차이를 만들지 않으므로 우리의 경우 덜 유용합니다. 그러나 WinXP의 경우 - 종료/재부팅을 가로 채기 만하면 일부 작업을 수행 한 다음 해당 종료 또는 재부팅 프로세스를 계속 진행하면 예상대로 작동합니다.
물론 현재 사용자가 시스템을 시작했기 때문에 시스템이 종료되었다고 가정하고 탐색기에서 시스템을 종료했다고 가정합니다. 프로그래밍 방식으로 종료하거나 다른 앱에서 종료하거나 다른 사용자가 종료 한 경우 이전에 종료 한 이유가 생깁니다. – MSalters
-1 답변이 불완전하고 Windows 탐색기에 한정되어 있기 때문입니다. 또한 Windows 7에서 ** 제거 ** 된 것으로 보입니다. – unixman83
WindowsXP에서는 잘 작동하지만 API hooking suggestion에 대해서는 Windows7 – conceptacid