zoukankan      html  css  js  c++  java
  • VC++获取操作系统的版本 GetVersionEx函数

    原文链接: http://blog.sina.com.cn/s/blog_8a7012cf010189tn.html

    函数:BOOL CSystemOperate::GetOSDisplayString( LPTSTR pszOS );

    LPTSTR pszOS将保存操作系统的版本信息
     
    实现如下:
    BOOL CSystemOperate::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 )
    {
    if( osvi.dwMinorVersion == 0 )
    {
    if( osvi.wProductType == VER_NT_WORKSTATION )
    StringCchCat(pszOS, BUFSIZE, TEXT("Windows Vista "));
    else StringCchCat(pszOS, BUFSIZE, TEXT("Windows Server 2008 " ));
    }
    if ( osvi.dwMinorVersion == 1 )
    {
    if( osvi.wProductType == VER_NT_WORKSTATION )
    StringCchCat(pszOS, BUFSIZE, TEXT("Windows 7 "));
    else StringCchCat(pszOS, BUFSIZE, TEXT("Windows Server 2008 R2 " ));
    }
    pGPI = (PGPI) GetProcAddress(
    GetModuleHandle(TEXT("kernel32.dll")), 
    "GetProductInfo");
    pGPI( osvi.dwMajorVersion, osvi.dwMinorVersion, 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 ( 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.wSuiteMask==VER_SUITE_WH_SERVER )
    StringCchCat(pszOS, BUFSIZE, TEXT( "Windows Home Server"));
    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);
    if ( osvi.dwMajorVersion >= 6 )
    {
    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"));
    }
    return TRUE; 
    }
     
    else
    printf( "This sample does not support this version of Windows. ");
    return FALSE;
    }
    }
     
     
    在函数的前面需要定义如下宏:
    #pragma comment(lib, "User32.lib")
    #define BUFSIZE 256
    #define PRODUCT_ULTIMATE                            0x00000001
    #define PRODUCT_HOME_BASIC                          0x00000002
    #define PRODUCT_HOME_PREMIUM                        0x00000003
    #define PRODUCT_ENTERPRISE                          0x00000004
    #define PRODUCT_HOME_BASIC_N                        0x00000005
    #define PRODUCT_BUSINESS                            0x00000006
    #define PRODUCT_STANDARD_SERVER                     0x00000007
    #define PRODUCT_DATACENTER_SERVER                   0x00000008
    #define PRODUCT_SMALLBUSINESS_SERVER                0x00000009
    #define PRODUCT_ENTERPRISE_SERVER                   0x0000000A
    #define PRODUCT_STARTER                             0x0000000B
    #define PRODUCT_DATACENTER_SERVER_CORE              0x0000000C
    #define PRODUCT_STANDARD_SERVER_CORE                0x0000000D
    #define PRODUCT_ENTERPRISE_SERVER_CORE              0x0000000E
    #define PRODUCT_ENTERPRISE_SERVER_IA64              0x0000000F
    #define PRODUCT_BUSINESS_N                          0x00000010
    #define PRODUCT_WEB_SERVER                          0x00000011
    #define PRODUCT_CLUSTER_SERVER                      0x00000012
    #define PRODUCT_HOME_SERVER                         0x00000013
    #define PRODUCT_STORAGE_EXPRESS_SERVER              0x00000014
    #define PRODUCT_STORAGE_STANDARD_SERVER             0x00000015
     
    #define PRODUCT_STORAGE_WORKGROUP_SERVER            0x00000016
    #define PRODUCT_STORAGE_ENTERPRISE_SERVER           0x00000017
    #define PRODUCT_SERVER_FOR_SMALLBUSINESS            0x00000018
    #define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM        0x00000019
    #define PRODUCT_HOME_PREMIUM_N                      0x0000001A
    #define PRODUCT_ENTERPRISE_N                        0x0000001B
    #define PRODUCT_ULTIMATE_N                          0x0000001C
    #define PRODUCT_WEB_SERVER_CORE                     0x0000001D
    #define PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT    0x0000001E
    #define PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY      0x0000001F
    #define PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING     0x00000020
    #define PRODUCT_SMALLBUSINESS_SERVER_PRIME          0x00000021
    #define PRODUCT_HOME_PREMIUM_SERVER                 0x00000022
    #define PRODUCT_SERVER_FOR_SMALLBUSINESS_V          0x00000023
    #define PRODUCT_STANDARD_SERVER_V                   0x00000024
    #define PRODUCT_DATACENTER_SERVER_V                 0x00000025
    #define PRODUCT_ENTERPRISE_SERVER_V                 0x00000026
    #define PRODUCT_DATACENTER_SERVER_CORE_V            0x00000027
    #define PRODUCT_STANDARD_SERVER_CORE_V              0x00000028
    #define PRODUCT_ENTERPRISE_SERVER_CORE_V            0x00000029
    #define PRODUCT_HYPERV                              0x0000002A
    #define SM_TABLETPC             86
    #define SM_MEDIACENTER          87
    #define SM_STARTER              88
    #define SM_SERVERR2             89
    #define VER_SERVER_NT                       0x80000000
    #define VER_WORKSTATION_NT                  0x40000000
    #define VER_SUITE_SMALLBUSINESS             0x00000001
    #define VER_SUITE_ENTERPRISE                0x00000002
    #define VER_SUITE_BACKOFFICE                0x00000004
    #define VER_SUITE_COMMUNICATIONS            0x00000008
    #define VER_SUITE_TERMINAL                  0x00000010
    #define VER_SUITE_SMALLBUSINESS_RESTRICTED 0x00000020
    #define VER_SUITE_EMBEDDEDNT                0x00000040
    #define VER_SUITE_DATACENTER                0x00000080
    #define VER_SUITE_SINGLEUSERTS              0x00000100
    #define VER_SUITE_PERSONAL                  0x00000200
    #define VER_SUITE_BLADE                     0x00000400
    #define VER_SUITE_EMBEDDED_RESTRICTED       0x00000800
    #define VER_SUITE_SECURITY_APPLIANCE        0x00001000
    #define VER_SUITE_STORAGE_SERVER            0x00002000
    #define VER_SUITE_COMPUTE_SERVER            0x00004000
    #define VER_SUITE_WH_SERVER                 0x00008000
     
    typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO);
    typedef BOOL (WINAPI *PGPI)(DWORD, DWORD, DWORD, DWORD, PDWORD);
     
     
     
     
     
     
     
  • 相关阅读:
    STM32 Cube之旅-尝试新的开发方式
    FOC 电流采样为什么不准?你忽略了这个细节
    STM32 外部中断详解(原理+配置代码)
    STM32 TIM高级定时器死区时间的计算
    【STM32系列汇总】小白博主的STM32实战快速进阶之路(持续更新)
    FOC 算法基础之欧拉公式
    一阶RC高通滤波器详解(仿真+matlab+C语言实现)
    一阶RC低通滤波器详解(仿真+matlab+C语言实现)
    matlab 调用C程序进行simulink仿真
    matlab 提示 Error using mex No supported compiler or SDK was found 错误的解决办法
  • 原文地址:https://www.cnblogs.com/huhu0013/p/4595751.html
Copyright © 2011-2022 走看看