OS 버전을 알아 내는 방식 참.. 지랄같이 만들어 두었습니다.
뭐 MS 의 정책상 어쩔수 없는것이겠지만 사용하는 우리 입장에서는 좀더 깔끔하게 보내준다면 좋을텐데요..
아무튼 OS 에 대한 버전을 알아 낼려면 다음과 같이...
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;
}