안녕하세요. 개발하다가 막히는 부분이 있어서 도움을 받고자.. 질문을 올립니다..
시스템 종료시 저희 프로그램에서 WM_QUERYENDSESSION 를 통해 로그 내용을 서버로 보내고 종료하도록 하고있습니다. 10초정도 시간이 걸려서 ShutdownBlockReasonCreate(), ShutdownBlockReasonDestroy() 함수를 사용하여 block 을 걸었는데요.. 이게 비스타 이후 부터 지원하는 함수더라구요..
7이상에서는 정상적으로 동작하고 있는데 xp 환경에서는
"프로시저 시작 지점 ShutdownBlockReasonDestroy을(를) DLL USER32.dll에서 찾을 수 없습니다."
라는 메시지가 나오네요..
프로시저라서 그런지
OutputDebugStringW를 타기 전에 프로그램이 죽어버리고 if 문으로 비스타 이상 분기 처리를 해도 프로그램이 죽어버립니다.
ShutdownBlockReasonCreate() 함수 외에 다른 함수로 대체할 수 있는 함수가 있는지..
아니면 해당 함수로 해결할 방법이 있는지 여쭤봅니다..
아래는 해당 예제 코드 입니다.
LRESULT CMFCApplication6Dlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_QUERYENDSESSION:
if (lParam & ENDSESSION_CRITICAL)
{
}
else
{
if ((lParam & ENDSESSION_CLOSEAPP) || (lParam & ENDSESSION_LOGOFF))
{
OSVERSIONINFOEX osvi;
ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
if ( GetVersionEx((OSVERSIONINFO*)&osvi) == TRUE )
{
// 비스타 이상
if (osvi.dwMajorVersion >= 6)
{
OutputDebugStringW(L"비스타 이상");
ShutdownBlockReasonCreate(GetSafeHwnd(), L"test");
ShutdownBlockReasonDestroy(GetSafeHwnd());
}
else
{
OutputDebugStringW(L"비스타 이전");
}
}
}
}
}
return CDialogEx::WindowProc(message, wParam, lParam);
}
[최초 등록일: ]
[최종 수정일: 4/20/2017]