怎样用程序判断系统是Win2000还是WinXP?

解决方案 »

  1.   

    void CLakerDlg::DetectSystemVersion(void)
    {
    OSVERSIONINFOEX osvi;
    BOOL bOsVersionInfoEx;
    char sql[ 100 ];
    memset( sql, 0, 100 );
    #define a( t ) strcat( sql, t ) ZeroMemory( &osvi, sizeof( OSVERSIONINFOEX ) );
    osvi.dwOSVersionInfoSize = sizeof( OSVERSIONINFOEX );
    a( " -->" ); if( !( bOsVersionInfoEx = GetVersionEx( ( OSVERSIONINFO * ) &osvi ) ) )
    {
    osvi.dwOSVersionInfoSize = sizeof ( OSVERSIONINFO );
    if ( !GetVersionEx ( ( OSVERSIONINFO * ) &osvi) )
    {
    //delete []s;
    return;
    }
    }
    switch (osvi.dwPlatformId)
    {
    case VER_PLATFORM_WIN32_NT:
    if( osvi.dwMajorVersion <= 4 )
    a( "Microsoft Windows NT " );
    if( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 )
    a( "Microsoft Windows 2000 " );
    if( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 )
    a( "Microsoft Windows XP " );
    if( bOsVersionInfoEx )
    {
    if ( osvi.wProductType == VER_NT_WORKSTATION )
    {
    if( osvi.wSuiteMask & VER_SUITE_PERSONAL )
    a( "Personal " );
    else
    a( "Professional " );
    }
    else if ( osvi.wProductType == VER_NT_SERVER )
    {
    if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
    a ( "DataCenter Server " );
    else if(  osvi.wSuiteMask & VER_SUITE_ENTERPRISE  )
    a ( "Advanced Server " );
    else
    a ( "Server " );
    }
    }
    else
    {
    HKEY hKey;
    char szProductType[80];
    DWORD dwBufLen; RegOpenKeyEx( HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Control\\ProductOptions", 0, KEY_QUERY_VALUE, &hKey );
    RegQueryValueEx( hKey, "ProductType", NULL, NULL, ( LPBYTE )szProductType, &dwBufLen );
    RegCloseKey( hKey );
    if( lstrcmpi( "WINNT", szProductType ) == 0 )
    a( "Professional " );
    if( lstrcmpi( "LANMANNT", szProductType ) == 0 )
    a(  "Server "  );
    if( lstrcmpi( "SERVERNT", szProductType ) == 0 )
    a( "Advanced Server " );
    } if (  osvi.dwMajorVersion <= 4  )
    {
    CString s0;
    s0.Format( "version %d.%d %s ( Build %d )", osvi.dwMajorVersion, osvi.dwMinorVersion, osvi.szCSDVersion, osvi.dwBuildNumber & 0xFFFF );
    a( ( LPCTSTR )s0 );
    }
    else

    CString s1;
    s1.Format( "%s ( Build %d )", osvi.szCSDVersion, osvi.dwBuildNumber & 0xFFFF );
    a( ( LPCTSTR )s1 );
    }
    break; case VER_PLATFORM_WIN32_WINDOWS: if ( osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 0 )
    {
    a( "Microsoft Windows 95 " );
    if ( osvi.szCSDVersion[ 1 ] == 'C' || osvi.szCSDVersion[ 1 ] == 'B'  )
    a( "OSR2 "  );

    if ( osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 10 )
    {
    a( "Microsoft Windows 98 " );
    if ( osvi.szCSDVersion[1] == 'A')
    a( "SE "  );

    if ( osvi.dwMajorVersion == 4 && osvi.dwMinorVersion == 90 )
    {
    a( "Microsoft Windows Me " );

    break; case VER_PLATFORM_WIN32s:
    a( "Microsoft Win32s" );
    break;
    }
    return; 
    }
      

  2.   

    现成的类下载:http://www.naughter.com/dtwinver.html
      

  3.   

    还有一段:#include <windows.h>;OSVERSIONINFO OSInfo;memset(&OSInfo, 0, sizeof(OSInfo));// Set size
    OSInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);if(::GetVersionEx((OSVERSIONINFO *) &OSInfo) == FALSE)
      return false;switch(OSInfo.dwPlatformId)
    {
      case VER_PLATFORM_WIN32_NT:
        if(OSInfo.dwMajorVersion <= 4)
          // Microsoft Windows NT    if((OSInfo.dwMajorVersion == 5) && (!OSInfo.dwMinorVersion))
          // Microsoft Windows 2000    if((OSInfo.dwMajorVersion == 5) && (OSInfo.dwMinorVersion == 1))
          // Microsoft Windows XP    break;  case VER_PLATFORM_WIN32_WINDOWS:
        if((OSInfo.dwMajorVersion == 4) && (!OSInfo.dwMinorVersion))
          if(OSInfo.szCSDVersion[1] == 'C')
            // Microsoft Windows 95 OSR2
          else
            // Microsoft Windows 95    if((OSInfo.dwMajorVersion == 4) && (OSInfo.dwMinorVersion == 10))
          if(OSInfo.szCSDVersion[1] == 'A')
            // Microsoft Windows 98 SE
          else
            // Microsoft Windows 98    if((OSInfo.dwMajorVersion == 4) && (OSInfo.dwMinorVersion == 90))
          // Microsoft Windows ME    break;  case VER_PLATFORM_WIN32s:
        // Microsoft Win32s  break;
    }