본문 바로가기
C & C++/C & C++

[Tip] Windows 버전 가져오기

by izen8 2011. 4. 4.
반응형
윈도우즈 버전이 필요한 경우가 생긴다.

설치를 할때나, 드라이버와의 호환성을 위해서 필요하다.

그것을 가져오는 루틴이다.

  1. CString CPCInfoDlg::GetWindowsVersion()   
  2. {   
  3.     CString strResult;   
  4.     unsigned int uVer = 0;   
  5.     int nVer = 0;   
  6.     uVer = WINVER;   
  7.     switch ( uVer )   
  8.     {   
  9.     case 0x0600 /*Windows LongHorn*/:   
  10.         return "Windows Long Horn(Vista)";   
  11.     case 0x0502 /*Windows Server 2003*/:   
  12.         return "Windows Server 2003";   
  13.     case 0x0501 /*Windows XP*/:   
  14.         nVer = GetServicePackVer();   
  15.         strResult.Format("Windows XP Service Pack %d", nVer );   
  16.         return strResult;   
  17.     case 0x0500 /*Windows 2000*/:   
  18.         return "Windows 2000";   
  19.     case 0x0410 /*Windows 98*/:   
  20.         return "Windows 98";   
  21.     case 0x0400 /*Windows 95*/:   
  22.         return "Windows 95";   
  23.     default:   
  24.         return "Unknown Windows Version";   
  25.     }   
  26. }   
  27. #define SERVICEPACKVER      "System\\CurrentControlSet\\Control\\Windows"   
  28. #define SERVICEPACKVALUE    "CSDVersion"   
  29.   
  30. INT CPCInfoDlg::GetServicePackVer()   
  31. {   
  32.     INT     nResult = 0;   
  33.     HKEY    hKey;   
  34.     TCHAR   szValueName[255] = {0, };   
  35.     BYTE    szValue[16300] = {0, };   
  36.     DWORD   dwValueNameSize = 0;   
  37.     DWORD   dwValueSize = 0;   
  38.     DWORD   dwIndex = 0;   
  39.     BOOL    bCheck = FALSE;   
  40.     BOOL    bFlag = TRUE;   
  41.   
  42.     if( ERROR_SUCCESS == RegOpenKey( HKEY_LOCAL_MACHINE, SERVICEPACKVER, &hKey ) )   
  43.     {   
  44.         //Display ValueName 존재 여부 파악   
  45.         while( ERROR_NO_MORE_ITEMS != bCheck )   
  46.         {   
  47.             dwValueNameSize = sizeof( szValueName );   
  48.             dwValueSize     = sizeof( szValue );   
  49.                
  50.             bCheck = RegEnumValue( hKey,                //서브키 핸들   
  51.                                    dwIndex,             //인덱스   
  52.                                    szValueName,         //값의 이름   
  53.                                    &dwValueNameSize,    //값의 버퍼 길이   
  54.                                    NULL,                //예약   
  55.                                    NULL,                //데이터 타입   
  56.                                    szValue,             //값   
  57.                                    &dwValueSize         //값의 길이   
  58.                                   );   
  59.                
  60.             if( ERROR_SUCCESS == bCheck && 0 == strcmp( szValueName, SERVICEPACKVALUE ) )   
  61.             {   
  62.                 nResult = (int)szValue[1];   
  63.             }   
  64.             dwIndex++;   
  65.                
  66.         }//end while( ERROR_NO_MORE_ITEMS != bReturn )   
  67.            
  68.     }//if( ERROR_SUCCESS == RegOpenKey( HKEY_CURRENT_USER, KEY_HIDE_DRIVE, &hKey ) )   
  69.   
  70.     return nResult;   
  71. }  


이렇게 하면 윈도우즈의 버전을 가져올 수 있고,

원하는 버전의 서비스팩 값을 알아올 수 있다.

참고로 Explorer의 버전의 값들이다. _WIN32_IE의 값으로 확인할 수 있다.

IE 7.0                    0x0700
IE 6.0 SP2                0x0603
IE 6.0 SP1                0x0601
IE 6.0                    0x0600
IE 5.5                    0x0550
IE 5.01                   0x0501
IE 5.0  5.0a  5.0b        0x0500
IE 4.01                   0x0401
IE 4.0                    0x0400
IE 3.0  3.01  3.02        0x0300


반응형

'C & C++ > C & C++' 카테고리의 다른 글

[Tip] 중복없는 난수 발생  (0) 2011.04.04
[Tip] 한영 전환 함수  (0) 2011.04.04
CString BYTE, WORD, DWORD  (0) 2011.03.31
[Tip] 모니터 해상도 구하기  (0) 2011.03.31
[Tip] Sleep() 함수 대신 프로그램 딜레이 시키기  (0) 2011.03.31

댓글