OS 버전을 알아 내는 방식 참.. 지랄같이 만들어 두었습니다. 뭐 MS 의 정책상 어쩔수 없는것이겠지만 사용하는 우리 입장에서는 좀더 깔끔하게 보내준다면 좋을텐데요.. 아무튼 OS 에 대한 버전을 알아 낼려면 다음과 같이...
less..
BOOL CUtil::getOsVersion(CString &osVersion) { BOOL rtnV = TRUE; int resultValue = 0; OSVERSIONINFOEX osvi; BOOL bOsVersionInfoEx; char tBuf[128]; ZeroMemory(tBuf, 128); ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); if(!(bOsVersionInfoEx = GetVersionEx((OSVERSIONINFO *) &osvi))) { osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); if(!GetVersionEx((OSVERSIONINFO *) &osvi)){} //return -1; return 0; } switch(osvi.dwPlatformId) { case VER_PLATFORM_WIN32_NT: if(osvi.dwMajorVersion >= 5) { switch(osvi.dwMinorVersion) { case 0: //2000 resultValue = 2000; //dest->Format("2000"); break; case 1: //xp resultValue = 2001; //dest->Format("XP"); break; case 2: //2003 resultValue = 2003; //dest->Format("2003"); break; default: //dest->Format("그냥 2000 이상"); resultValue = 2000; break; } }else{ //dest->Format("NT 4.0 이하"); //NT 4.0 이하 resultValue = 40; } break; case VER_PLATFORM_WIN32_WINDOWS: if(osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0) { resultValue = 95; //dest->Format("95"); //윈도 95 } if(osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10){ resultValue = 98; //dest->Format("98"); //윈도 98 } if(osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90){ resultValue = 99; //dest->Format("ME"); //윈도 ME } //Win32 //dest->Format("확인되지 않은 윈32 운영체제"); break; case VER_PLATFORM_WIN32s: //dest->Format("Win32s"); //윈도우 32s resultValue = 90; break; default: //dest->Format("측정 불가"); //OS 측정 불가 resultValue = 0; break; } switch(resultValue){ case 95: case 98: case 2000: case 2003: osVersion.Format("%d", resultValue); break; case 99: osVersion.Format("ME"); break; case 2001: osVersion.Format("XP"); break; case 45: osVersion.Format("NT"); break; default: rtnV = FALSE; break; } return rtnV; }
less..