如题,谢谢

解决方案 »

  1.   

    void CLakerDlg::DetectSystemVersion(void)
    {
        OSVERSIONINFOEX osvi;
        BOOL bOsVersionInfoEx;
        //char * s = new char[ 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;
        }
        DispMessage( ( LPCTSTR )sql );
        //delete []s;
        return; 
    }