zoukankan      html  css  js  c++  java
  • 得到当前操作系统的版本的

    #include <windows.h>
    #include <stdio.h>

    #define BUFSIZE 80

    int main()
    {
       OSVERSIONINFOEX osvi;
       BOOL bOsVersionInfoEx;

       // Try calling GetVersionEx using the OSVERSIONINFOEX structure.
       // If that fails, try using the OSVERSIONINFO structure.

       ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
       osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);

       if( !(bOsVersionInfoEx = GetVersionEx ((OSVERSIONINFO *) &osvi)) )
       {
          osvi.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
          if (! GetVersionEx ( (OSVERSIONINFO *) &osvi) )
             return FALSE;
       }

       switch (osvi.dwPlatformId)
       {
          // Test for the Windows NT product family.
          case VER_PLATFORM_WIN32_NT:

             // Test for the specific product family.
             if ( osvi.dwMajorVersion == 5 && osvi.dwMinorVersion == 2 )
                printf ("Microsoft Windows Server 2003 family, ");

             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 )
                {
                   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( 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 " );
                   }
                }
             }
             else  // Test for specific product on Windows NT 4.0 SP5 and earlier
             {
                HKEY hKey;
                char szProductType[BUFSIZE];
                DWORD dwBufLen=BUFSIZE;
                LONG lRet;

                lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE,
                   "SYSTEM//CurrentControlSet//Control//ProductOptions",
                   0, KEY_QUERY_VALUE, &hKey );
                if( lRet != ERROR_SUCCESS )
                   return FALSE;

                lRet = RegQueryValueEx( hKey, "ProductType", NULL, NULL,
                   (LPBYTE) szProductType, &dwBufLen);
                if( (lRet != ERROR_SUCCESS) || (dwBufLen > BUFSIZE) )
                   return FALSE;

                RegCloseKey( hKey );

                if ( lstrcmpi( "WINNT", szProductType) == 0 )
                   printf( "Workstation " );
                if ( lstrcmpi( "LANMANNT", szProductType) == 0 )
                   printf( "Server " );
                if ( lstrcmpi( "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, "Service Pack 6" ) == 0 )
             {
                HKEY hKey;
                LONG lRet;

                // Test for SP6 versus SP6a.
                lRet = RegOpenKeyEx( HKEY_LOCAL_MACHINE,
                   "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
                {
                   printf( "%s (Build %d)/n",
                      osvi.szCSDVersion,
                      osvi.dwBuildNumber & 0xFFFF);
                }

                RegCloseKey( hKey );
             }
             else // Windows NT 3.51 and earlier or Windows 2000 and later
             {
                printf( "%s (Build %d)/n",
                   osvi.szCSDVersion,
                   osvi.dwBuildNumber & 0xFFFF);
             }


             break;

          // Test for the Windows 95 product family.
          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' )
                    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;
    }

  • 相关阅读:
    array_map()与array_shift()搭配使用 PK array_column()函数
    Educational Codeforces Round 8 D. Magic Numbers
    hdu 1171 Big Event in HDU
    hdu 2844 poj 1742 Coins
    hdu 3591 The trouble of Xiaoqian
    hdu 2079 选课时间
    hdu 2191 珍惜现在,感恩生活 多重背包入门题
    hdu 5429 Geometric Progression 高精度浮点数(java版本)
    【BZOJ】1002: [FJOI2007]轮状病毒 递推+高精度
    hdu::1002 A + B Problem II
  • 原文地址:https://www.cnblogs.com/superch0054/p/4010252.html
Copyright © 2011-2022 走看看