只要判断9x、vista、Windows 2008系统就行了。如果是9x系统,则输出,“这是Windows 9x”。如果是vista系统,则输出,“这是Windows Vista系统。”如果是Windows 2008系统,则输出,“这是Windows 2008系统。”否则输出“不是以上三种系统。”

解决方案 »

  1.   

    #include <windows.h>
    #include <tchar.h>
    #include <stdio.h>#define BUFSIZE 80typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO);int __cdecl _tmain()
    {
       OSVERSIONINFOEX osvi;
       SYSTEM_INFO si;
       PGNSI pGNSI;
       BOOL bOsVersionInfoEx;   ZeroMemory(&si, sizeof(SYSTEM_INFO));
       ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); 
       osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);   if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )
       {
          osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
          if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) ) 
             return FALSE;
       }   pGNSI = (PGNSI) GetProcAddress(
          GetModuleHandle(TEXT("kernel32.dll")), 
          "GetNativeSystemInfo");
       if(NULL != pGNSI)
          pGNSI(&si);
       else GetSystemInfo(&si);   switch (osvi.dwPlatformId)
       {
          // Test for the Windows NT product family.      case VER_PLATFORM_WIN32_NT:      // Test for the specific product.      if ( osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 0 )
          {
             if( osvi.wProductType == VER_NT_WORKSTATION )
                 printf ("Windows Vista ");
             else printf ("Windows Server \"Longhorn\" " );
          }      if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 )
          {
             if( GetSystemMetrics(SM_SERVERR2) )
                printf( "Microsoft Windows Server 2003 \"R2\" ");
             else if( osvi.wProductType == VER_NT_WORKSTATION &&
                si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64)
             {
                printf( "Microsoft Windows XP Professional x64 Edition ");
             }
             else printf ("Microsoft Windows Server 2003, ");
          }      if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 )
             printf ("Microsoft Windows XP ");      if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 )
             printf ("Microsoft Windows 2000 ");      if ( osvi.dwMajorVersion <= 4 )
             printf ("Microsoft Windows NT ");      // Test for specific product on Windows NT 4.0 SP6 and later.
          if( bOsVersionInfoEx )
          {
             // Test for the workstation type.
             if ( osvi.wProductType == VER_NT_WORKSTATION &&
                  si.wProcessorArchitecture!=PROCESSOR_ARCHITECTURE_AMD64)
             {
                if( osvi.dwMajorVersion == 4 )
                   printf ( "Workstation 4.0 " );
                else if( osvi.wSuiteMask & VER_SUITE_PERSONAL )
                   printf ( "Home Edition " );
                else printf ( "Professional " );
             }
                
             // Test for the server type.
             else if ( osvi.wProductType == VER_NT_SERVER || 
                       osvi.wProductType == VER_NT_DOMAIN_CONTROLLER )
             {
                if(osvi.dwMajorVersion==5 && osvi.dwMinorVersion==2)
                {
                   if ( si.wProcessorArchitecture ==
                        PROCESSOR_ARCHITECTURE_IA64 )
                   {
                       if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
                          printf ( "Datacenter Edition "
                                   "for Itanium-based Systems" );
                       else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
                          printf ( "Enterprise Edition "
                                   "for Itanium-based Systems" );
                   }               else if ( si.wProcessorArchitecture ==
                             PROCESSOR_ARCHITECTURE_AMD64 )
                   {
                       if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
                          printf ( "Datacenter x64 Edition " );
                       else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
                          printf ( "Enterprise x64 Edition " );
                       else printf( "Standard x64 Edition " );
                   }               else
                   {
                       if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
                          printf ( "Datacenter Edition " );
                       else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
                          printf ( "Enterprise Edition " );
                       else if ( osvi.wSuiteMask & VER_SUITE_BLADE )
                          printf ( "Web Edition " );
                       else printf ( "Standard Edition " );
                   }
                }
                else if(osvi.dwMajorVersion==5 && osvi.dwMinorVersion==0)
                {
                   if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
                      printf ( "Datacenter Server " );
                   else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
                      printf ( "Advanced Server " );
                   else printf ( "Server " );
                }
                else  // Windows NT 4.0 
                {
                   if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
                      printf ("Server 4.0, Enterprise Edition " );
                   else printf ( "Server 4.0 " );
                }
             }
          }
          // Test for specific product on Windows NT 4.0 SP5 and earlier
          else  
          {
             HKEY hKey;
             TCHAR szProductType[BUFSIZE];
             DWORD dwBufLen=BUFSIZE*sizeof(TCHAR);
             LONG lRet;         lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE,
                TEXT("SYSTEM\\CurrentControlSet\\Control\\"
                     "ProductOptions"), 0, KEY_QUERY_VALUE, &hKey );
             if( lRet != ERROR_SUCCESS )
                return FALSE;         lRet = RegQueryValueEx( hKey, TEXT("ProductType"),
                NULL, NULL, (LPBYTE) szProductType, &dwBufLen);
             RegCloseKey( hKey );         if( (lRet != ERROR_SUCCESS) ||
                 (dwBufLen > BUFSIZE*sizeof(TCHAR)) )
                return FALSE;         if ( lstrcmpi( TEXT("WINNT"), szProductType) == 0 )
                printf( "Workstation " );
             if ( lstrcmpi( TEXT("LANMANNT"), szProductType) == 0 )
                printf( "Server " );
             if ( lstrcmpi( TEXT("SERVERNT"), szProductType) == 0 )
                printf( "Advanced Server " );
             printf( "%d.%d ", osvi.dwMajorVersion, osvi.dwMinorVersion );
          }      // Display service pack (if any) and build number.      if( osvi.dwMajorVersion == 4 && 
              lstrcmpi( osvi.szCSDVersion, TEXT("Service Pack 6") ) == 0 )
          { 
             HKEY hKey;
             LONG lRet;         // Test for SP6 versus SP6a.
             lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE,
                TEXT("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\"
                     "Hotfix\\Q246009"), 0, KEY_QUERY_VALUE, &hKey );
             if( lRet == ERROR_SUCCESS )
                printf( "Service Pack 6a (Build %d)\n", 
                osvi.dwBuildNumber & 0xFFFF );         
             else // Windows NT 4.0 prior to SP6a
             {
                _tprintf( TEXT("%s (Build %d)\n"),
                   osvi.szCSDVersion,
                   osvi.dwBuildNumber & 0xFFFF);
             }         RegCloseKey( hKey );
          }
          else // not Windows NT 4.0 
          {
             _tprintf( TEXT("%s (Build %d)\n"),
                osvi.szCSDVersion,
                osvi.dwBuildNumber & 0xFFFF);
          }      break;      // Test for the Windows Me/98/95.
          case VER_PLATFORM_WIN32_WINDOWS:      if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0)
          {
              printf ("Microsoft Windows 95 ");
              if (osvi.szCSDVersion[1]=='C' || osvi.szCSDVersion[1]=='B')
                 printf("OSR2 " );
          }       if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10)
          {
              printf ("Microsoft Windows 98 ");
              if ( osvi.szCSDVersion[1]=='A' || osvi.szCSDVersion[1]=='B')
                 printf("SE " );
          }       if (osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90)
          {
              printf ("Microsoft Windows Millennium Edition\n");
          } 
          break;      case VER_PLATFORM_WIN32s:      printf ("Microsoft Win32s\n");
          break;
       }
       return TRUE; 
    }
      

  2.   

      是的,用 GetVersionEx 的到一个结构,然后通过结构里的dwMajorVersion 和dwMinorVersion 来进行判断,提供个思路
      

  3.   

    2L 怎么把我的代码写出来了?:)开句玩笑~~~2L正解。该程序可以分出差不多20种OS,记得当初的一个工程就是用的这个函数。
      

  4.   

    都没错 ,获取系统信息和 版本结构都可以,基本都是win32API 提供的。