如何获得我想有个标志位 然后通过一个方法得到 当前为XP系统则状态位置0 win7则置1 不知有什么好的方法没 

解决方案 »

  1.   

    int DetectWindowsVersion()
    {
    GetNativeSysInfo pGNSI = NULL;

    BOOL m_bOsVersionInfoEx = FALSE;
    int m_nWinVersion = Win_Unknown;

    OSVERSIONINFOEX m_osvi;

    // Try calling GetVersionEx using the OSVERSIONINFOEX structure.
    ZeroMemory(&m_osvi, sizeof(OSVERSIONINFOEX));
    m_osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);

    if( !(m_bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &m_osvi)) )
    {
    // If that fails, try using the OSVERSIONINFO structure.
    m_osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
    if (! GetVersionEx ( (OSVERSIONINFO *) &m_osvi) )
    return m_nWinVersion;
    }

    SYSTEM_INFO m_SysInfo;

    pGNSI = (GetNativeSysInfo) GetProcAddress(GetModuleHandle(_T("kernel32.dll")), "GetNativeSystemInfo");
    if(NULL != pGNSI) pGNSI(&m_SysInfo);
    else GetSystemInfo(&m_SysInfo);
    /*
    switch (m_osvi.dwPlatformId)
    {

      // Test for the Windows NT product family.
      case VER_PLATFORM_WIN32_NT:
    */
    // Test for the specific product family
    if(m_osvi.dwMajorVersion >= 6)
    m_nWinVersion = WinVista;

    else if ( m_osvi.dwMajorVersion == 5 && m_osvi.dwMinorVersion == 2 )
    m_nWinVersion = WinServer2003;

    else if ( m_osvi.dwMajorVersion == 5 && m_osvi.dwMinorVersion == 1 )
    m_nWinVersion = WinXP;

    else if ( m_osvi.dwMajorVersion == 5 && m_osvi.dwMinorVersion == 0 )
    m_nWinVersion = Win2000_Unknown;

    else if ( m_osvi.dwMajorVersion <= 4 )
    m_nWinVersion = WinNT;

    return m_nWinVersion;
    }
      

  2.   

    #define Win_Unknown 0
    #define WinVista 60
    #define WinServer2003 52
    #define WinXP 51
    #define Win2000_Unknown 50
    #define WinNT 41
    #define WinNT_40_Workstation 40
      

  3.   

    GetVersionEx可以获取操作系统的版本,具体的版本号你可以去查一下MSDN
      

  4.   


    #include <windows.h>
    #include <tchar.h>
    #include <stdio.h>
    #include <strsafe.h>#define BUFSIZE 256typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO);
    typedef BOOL (WINAPI *PGPI)(DWORD, DWORD, DWORD, DWORD, PDWORD);BOOL GetOSDisplayString( LPTSTR pszOS)
    {
       OSVERSIONINFOEX osvi;
       SYSTEM_INFO si;
       PGNSI pGNSI;
       PGPI pGPI;
       BOOL bOsVersionInfoEx;
       DWORD dwType;   ZeroMemory(&si, sizeof(SYSTEM_INFO));
       ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));   osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);   if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )
          return 1;   // Call GetNativeSystemInfo if supported or GetSystemInfo otherwise.   pGNSI = (PGNSI) GetProcAddress(
          GetModuleHandle(TEXT("kernel32.dll")), 
          "GetNativeSystemInfo");
       if(NULL != pGNSI)
          pGNSI(&si);
       else GetSystemInfo(&si);   if ( VER_PLATFORM_WIN32_NT==osvi.dwPlatformId && 
            osvi.dwMajorVersion > 4 )
       {
          StringCchCopy(pszOS, BUFSIZE, TEXT("Microsoft "));      // Test for the specific product.      if ( osvi.dwMajorVersion == 6 && osvi.dwMinorVersion == 0 )
          {
             if( osvi.wProductType == VER_NT_WORKSTATION )
                 StringCchCat(pszOS, BUFSIZE, TEXT("Windows Vista "));
             else StringCchCat(pszOS, BUFSIZE, TEXT("Windows Server 2008 " ));         pGPI = (PGPI) GetProcAddress(
                GetModuleHandle(TEXT("kernel32.dll")), 
                "GetProductInfo");         pGPI( 6, 0, 0, 0, &dwType);         switch( dwType )
             {
                case PRODUCT_ULTIMATE:
                   StringCchCat(pszOS, BUFSIZE, TEXT("Ultimate Edition" ));
                   break;
                case PRODUCT_HOME_PREMIUM:
                   StringCchCat(pszOS, BUFSIZE, TEXT("Home Premium Edition" ));
                   break;
                case PRODUCT_HOME_BASIC:
                   StringCchCat(pszOS, BUFSIZE, TEXT("Home Basic Edition" ));
                   break;
                case PRODUCT_ENTERPRISE:
                   StringCchCat(pszOS, BUFSIZE, TEXT("Enterprise Edition" ));
                   break;
                case PRODUCT_BUSINESS:
                   StringCchCat(pszOS, BUFSIZE, TEXT("Business Edition" ));
                   break;
                case PRODUCT_STARTER:
                   StringCchCat(pszOS, BUFSIZE, TEXT("Starter Edition" ));
                   break;
                case PRODUCT_CLUSTER_SERVER:
                   StringCchCat(pszOS, BUFSIZE, TEXT("Cluster Server Edition" ));
                   break;
                case PRODUCT_DATACENTER_SERVER:
                   StringCchCat(pszOS, BUFSIZE, TEXT("Datacenter Edition" ));
                   break;
                case PRODUCT_DATACENTER_SERVER_CORE:
                   StringCchCat(pszOS, BUFSIZE, TEXT("Datacenter Edition (core installation)" ));
                   break;
                case PRODUCT_ENTERPRISE_SERVER:
                   StringCchCat(pszOS, BUFSIZE, TEXT("Enterprise Edition" ));
                   break;
                case PRODUCT_ENTERPRISE_SERVER_CORE:
                   StringCchCat(pszOS, BUFSIZE, TEXT("Enterprise Edition (core installation)" ));
                   break;
                case PRODUCT_ENTERPRISE_SERVER_IA64:
                   StringCchCat(pszOS, BUFSIZE, TEXT("Enterprise Edition for Itanium-based Systems" ));
                   break;
                case PRODUCT_SMALLBUSINESS_SERVER:
                   StringCchCat(pszOS, BUFSIZE, TEXT("Small Business Server" ));
                   break;
                case PRODUCT_SMALLBUSINESS_SERVER_PREMIUM:
                   StringCchCat(pszOS, BUFSIZE, TEXT("Small Business Server Premium Edition" ));
                   break;
                case PRODUCT_STANDARD_SERVER:
                   StringCchCat(pszOS, BUFSIZE, TEXT("Standard Edition" ));
                   break;
                case PRODUCT_STANDARD_SERVER_CORE:
                   StringCchCat(pszOS, BUFSIZE, TEXT("Standard Edition (core installation)" ));
                   break;
                case PRODUCT_WEB_SERVER:
                   StringCchCat(pszOS, BUFSIZE, TEXT("Web Server Edition" ));
                   break;
             }
             if ( si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64 )
                StringCchCat(pszOS, BUFSIZE, TEXT( ", 64-bit" ));
             else if (si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_INTEL )
                StringCchCat(pszOS, BUFSIZE, TEXT(", 32-bit"));
          }      if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 )
          {
             if( GetSystemMetrics(SM_SERVERR2) )
                StringCchCat(pszOS, BUFSIZE, TEXT( "Windows Server 2003 R2, "));
             else if ( osvi.wSuiteMask==VER_SUITE_STORAGE_SERVER )
                StringCchCat(pszOS, BUFSIZE, TEXT( "Windows Storage Server 2003"));
             else if( osvi.wProductType == VER_NT_WORKSTATION &&
                      si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64)
             {
                StringCchCat(pszOS, BUFSIZE, TEXT( "Windows XP Professional x64 Edition"));
             }
             else StringCchCat(pszOS, BUFSIZE, TEXT("Windows Server 2003, "));         // Test for the server type.
             if ( osvi.wProductType != VER_NT_WORKSTATION )
             {
                if ( si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_IA64 )
                {
                    if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
                       StringCchCat(pszOS, BUFSIZE, TEXT( "Datacenter Edition for Itanium-based Systems" ));
                    else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
                       StringCchCat(pszOS, BUFSIZE, TEXT( "Enterprise Edition for Itanium-based Systems" ));
                }            else if ( si.wProcessorArchitecture==PROCESSOR_ARCHITECTURE_AMD64 )
                {
                    if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
                       StringCchCat(pszOS, BUFSIZE, TEXT( "Datacenter x64 Edition" ));
                    else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
                       StringCchCat(pszOS, BUFSIZE, TEXT( "Enterprise x64 Edition" ));
                    else StringCchCat(pszOS, BUFSIZE, TEXT( "Standard x64 Edition" ));
                }            else
                {
                    if ( osvi.wSuiteMask & VER_SUITE_COMPUTE_SERVER )
                       StringCchCat(pszOS, BUFSIZE, TEXT( "Compute Cluster Edition" ));
                    else if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
                       StringCchCat(pszOS, BUFSIZE, TEXT( "Datacenter Edition" ));
                    else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
                       StringCchCat(pszOS, BUFSIZE, TEXT( "Enterprise Edition" ));
                    else if ( osvi.wSuiteMask & VER_SUITE_BLADE )
                       StringCchCat(pszOS, BUFSIZE, TEXT( "Web Edition" ));
                    else StringCchCat(pszOS, BUFSIZE, TEXT( "Standard Edition" ));
                }
             }
          }      if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 1 )
          {
             StringCchCat(pszOS, BUFSIZE, TEXT("Windows XP "));
             if( osvi.wSuiteMask & VER_SUITE_PERSONAL )
                StringCchCat(pszOS, BUFSIZE, TEXT( "Home Edition" ));
             else StringCchCat(pszOS, BUFSIZE, TEXT( "Professional" ));
          }      if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 0 )
          {
             StringCchCat(pszOS, BUFSIZE, TEXT("Windows 2000 "));         if ( osvi.wProductType == VER_NT_WORKSTATION )
             {
                StringCchCat(pszOS, BUFSIZE, TEXT( "Professional" ));
             }
             else 
             {
                if( osvi.wSuiteMask & VER_SUITE_DATACENTER )
                   StringCchCat(pszOS, BUFSIZE, TEXT( "Datacenter Server" ));
                else if( osvi.wSuiteMask & VER_SUITE_ENTERPRISE )
                   StringCchCat(pszOS, BUFSIZE, TEXT( "Advanced Server" ));
                else StringCchCat(pszOS, BUFSIZE, TEXT( "Server" ));
             }
          }       // Include service pack (if any) and build number.      if( _tcslen(osvi.szCSDVersion) > 0 )
          {
              StringCchCat(pszOS, BUFSIZE, TEXT(" ") );
              StringCchCat(pszOS, BUFSIZE, osvi.szCSDVersion);
          }      TCHAR buf[80];      StringCchPrintf( buf, 80, TEXT(" (build %d)"), osvi.dwBuildNumber);
          StringCchCat(pszOS, BUFSIZE, buf);      return TRUE; 
       }   else
       {  
          printf( "This sample does not support this version of Windows.\n");
          return FALSE;
       }
    }int __cdecl _tmain()
    {
        TCHAR szOS[BUFSIZE];    if( GetOSDisplayString( szOS ) )
            _tprintf( TEXT("\n%s\n"), szOS );
    }