VC 判断 Windows 操作系统版本

 

 

<转载请注明出处,请尊重他人劳动成果>

 

 

//headerfile

 

 

    /** @brief 操作系统版本定义 */

    enum WinVerDef

    {

        WIN_VER_UNKNOWN = -1,

        WIN_VER_95 = 0,

        WIN_VER_98,

        WIN_VER_ME,

        WIN_VER_NT4,

        WIN_VER_2K,

        WIN_VER_XP,

        WIN_VER_XP64,

        WIN_VER_2K3,

        WIN_VER_2K3R2,

        WIN_VER_VISTA,

        WIN_VER_2K8,

        WIN_VER_2K8R2,

        WIN_VER_WIN7,

    };

 

    /**

            @brief          判断当前操作系统是否比指定操作系统更新

            @see            WinVerDef

 

            @param          [in]    specVer 指定的操作系统版本

            @param          [out]   iResult 返回结果/n

                                    返回结果大于0表示当前操作系统比指定操作系统新;/n

                                    返回结果等于0表示当前操作系统和指定操作系统相同;/n

                                    返回结果小于0表示当前操作系统比指定操作系统旧。

 

            @retval         TRUE    功能执行成功,根据iResult参数进行版本比较判断

            @retval         FALSE   功能执行失败

 

            @note           None

 

            @exception      None

    */

    BOOL IsOlderSystem( WinVerDef specVer, INT* iResult );

 

    /**

            @brief          返回当前操作系统版本

            @see            WinVerDef

 

            @param          [out]   winVer  当前操作系统版本的枚举值

 

            @return         TRUE    功能执行成功,winVer参数返回操作系统版本

            @return         FALSE   功能执行失败

 

            @note           None

 

            @exception      None

    */

    BOOL GetWindowsVersion( WinVerDef* winVer );

 

 

 

 

 

 

// cpp

// 定义目前存在的操作系统主版本号

enum WinVerMajor

{

    WIN_MAJOR_NT4_ME_98_95          = 4,

    WIN_MAJOR_2K3R2_2K3_XP_2K       = 5,

    WIN_MAJOR_WIN7_2K8R2_2K8_VISTA  = 6,

};

 

// 定义目前存在的操作系统次版本号

enum WinVerminor

{

    WIN_MINOR_2K8_VISTA_2K_NT4_95   = 0,

    WIN_MINOR_WIN7_2K8R2_XP         = 1,

    WIN_MINOR_2K3R2_2K3_XP64        = 2,

    WIN_MINOR_98                    = 10,

    WIN_MINOR_ME                    = 90,

};

 

 

 

 

typedef void (WINAPI *GetNativeSystemInfoFunc)(LPSYSTEM_INFO);

 

 

/** @brief 返回当前的操作系统版本 */

BOOL GetWindowsVersion( WinVerDef* winVer )

{

    OSVERSIONINFOEX osversionInfo;

    ZeroMemory( &osversionInfo, sizeof(osversionInfo) );

    osversionInfo.dwOSVersionInfoSize = sizeof(osversionInfo);

    *winVer = WIN_VER_UNKNOWN;

 

    if ( NULL == winVer || FALSE == GetVersionEx((LPOSVERSIONINFO)&osversionInfo) )

    {

        return FALSE;

    }

 

    switch( osversionInfo.dwMajorVersion )

    {

    case WIN_MAJOR_NT4_ME_98_95:

 

        switch( osversionInfo.dwMinorVersion )

        {

        case WIN_MINOR_2K8_VISTA_2K_NT4_95:

            if ( VER_PLATFORM_WIN32_NT == osversionInfo.dwPlatformId )

            {

                *winVer = WIN_VER_NT4;

            }

            else

            {

                *winVer = WIN_VER_95;

            }

            break;

        case WIN_MINOR_98:

            *winVer = WIN_VER_98;

            break;

        case WIN_MINOR_ME:

            *winVer = WIN_VER_ME;

            break;

        default:

            break;

        }

 

        break;

 

    case WIN_MAJOR_2K3R2_2K3_XP_2K:

 

        switch( osversionInfo.dwMinorVersion )

        {

        case WIN_MINOR_2K8_VISTA_2K_NT4_95:

            *winVer = WIN_VER_2K;

            break;

        case WIN_MINOR_WIN7_2K8R2_XP:

            *winVer = WIN_VER_XP;

            break;

        case WIN_MINOR_2K3R2_2K3_XP64:

            if ( VER_NT_WORKSTATION == osversionInfo.wProductType )

            {

                *winVer = WIN_VER_XP64;

                break;

            }

 

            if ( 0 != GetSystemMetrics( SM_SERVERR2 ) )

            {

                *winVer = WIN_VER_2K3R2;

            }

            else

            {

                *winVer = WIN_VER_2K3;

            }

            break;

        default:

            break;

        }

 

        break;

 

    case WIN_MAJOR_WIN7_2K8R2_2K8_VISTA:

 

        switch( osversionInfo.dwMinorVersion )

        {

        case WIN_MINOR_2K8_VISTA_2K_NT4_95:

            if ( VER_NT_WORKSTATION == osversionInfo.wProductType )

            {

                *winVer = WIN_VER_VISTA;

            }

            else

            {

                *winVer = WIN_VER_2K8;

            }

            break;

        case WIN_MINOR_WIN7_2K8R2_XP:

            if ( VER_NT_WORKSTATION == osversionInfo.wProductType )

            {

                *winVer = WIN_VER_WIN7;

            }

            else

            {

                *winVer = WIN_VER_2K8R2;

            }

            break;

        default:

            break;

        }

 

        break;

 

    default:

        break;

    }

 

    return TRUE;

}

 

 

/** @brief 判断当前操作系统是否比sepcVer指定的系统更新 */

BOOL IsOlderSystem( WinVerDef specVer, INT* iResult )

{

    if ( NULL == iResult )

    {

        return FALSE;

    }

 

    WinVerDef currVer = WIN_VER_UNKNOWN;

 

    if ( FALSE == GetWindowsVersion( &currVer ) || WIN_VER_UNKNOWN == currVer )

    {

        return FALSE;

    }

    else

    {

        *iResult = currVer - specVer;

    }

 

    return TRUE;

}

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值