您的位置:首页 > 其它

VC 判断 Windows 操作系统版本

2010-04-22 22:09 260 查看
<转载请注明出处,请尊重他人劳动成果>

//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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: