下午在逛cj 的时候,无意见看到的这样一段文章与代码,示例代码就不用贴出来了吧!

 

There are many classes to get Windows version numbers, so why another one? Briefly, because none of them offered the simplicity and low overhead that I wanted, while giving me the information I needed. Instead of writing endless standalone functions (is it XP? is it SP2?), I decided to incorporate everything into a single class.


To keep the class overhead down to a minimum, I designed a new class as a singleton, with version data retrieved and stored only once per program.

 

// XWinVer.h  Version 1.2
//
// Author: Hans Dietrich
//         hdietrich@gmail.com
//
// This software is released into the public domain.  You are free to use
// it in any way you like, except that you may not sell this source code.
//
// This software is provided "as is" with no expressed or implied warranty.
// I accept no liability for any damage or loss of business that this
// software may cause.
//
///
#ifndef XWINVER_H
#define XWINVER_H
///
//
// version strings
//
#define WUNKNOWNSTR	_T("unknown Windows version")
#define W95STR		_T("Windows 95")
#define W95SP1STR	_T("Windows 95 SP1")
#define W95OSR2STR	_T("Windows 95 OSR2")
#define W98STR		_T("Windows 98")
#define W98SP1STR	_T("Windows 98 SP1")
#define W98SESTR	_T("Windows 98 SE")
#define WMESTR		_T("Windows ME")
#define WNT351STR	_T("Windows NT 3.51")
#define WNT4STR		_T("Windows NT 4")
#define W2KSTR		_T("Windows 2000")
#define WXPSTR		_T("Windows XP")
#define WVISTASTR	_T("Windows Vista")
#define W2003STR	_T("Windows Server 2003")
#define WCESTR		_T("Windows CE")
///
//
// version integer values
//
#define WUNKNOWN	0
#define W9XFIRST	1
#define W95			1
#define W95SP1		2
#define W95OSR2		3
#define W98			4
#define W98SP1		5
#define W98SE		6
#define WME			7
#define W9XLAST		99
#define WNTFIRST	101
#define WNT351		101
#define WNT4		102
#define W2K			103
#define WXP			104
#define W2003		105
#define WVISTA		106
#define WNTLAST		199
#define WCEFIRST	201
#define WCE			201
#define WCELAST		299
// flags returned from GetVistaProductType()
#ifndef PRODUCT_BUSINESS
#define PRODUCT_BUSINESS						0x00000006 	// Business Edition
#define PRODUCT_BUSINESS_N						0x00000010 	// Business Edition
#define PRODUCT_CLUSTER_SERVER					0x00000012 	// Cluster Server Edition
#define PRODUCT_DATACENTER_SERVER				0x00000008 	// Server Datacenter Edition (full installation)
#define PRODUCT_DATACENTER_SERVER_CORE			0x0000000C 	// Server Datacenter Edition (core installation)
#define PRODUCT_ENTERPRISE						0x00000004 	// Enterprise Edition
#define PRODUCT_ENTERPRISE_N					0x0000001B 	// Enterprise Edition
#define PRODUCT_ENTERPRISE_SERVER				0x0000000A 	// Server Enterprise Edition (full installation)
#define PRODUCT_ENTERPRISE_SERVER_CORE			0x0000000E 	// Server Enterprise Edition (core installation)
#define PRODUCT_ENTERPRISE_SERVER_IA64			0x0000000F 	// Server Enterprise Edition for Itanium-based Systems
#define PRODUCT_HOME_BASIC						0x00000002 	// Home Basic Edition
#define PRODUCT_HOME_BASIC_N					0x00000005 	// Home Basic Edition
#define PRODUCT_HOME_PREMIUM					0x00000003 	// Home Premium Edition
#define PRODUCT_HOME_PREMIUM_N					0x0000001A 	// Home Premium Edition
#define PRODUCT_HOME_SERVER						0x00000013 	// Home Server Edition
#define PRODUCT_SERVER_FOR_SMALLBUSINESS		0x00000018 	// Server for Small Business Edition
#define PRODUCT_SMALLBUSINESS_SERVER			0x00000009 	// Small Business Server
#define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM	0x00000019 	// Small Business Server Premium Edition
#define PRODUCT_STANDARD_SERVER					0x00000007 	// Server Standard Edition (full installation)
#define PRODUCT_STANDARD_SERVER_CORE			0x0000000D 	// Server Standard Edition (core installation)
#define PRODUCT_STARTER							0x0000000B 	// Starter Edition
#define PRODUCT_STORAGE_ENTERPRISE_SERVER		0x00000017 	// Storage Server Enterprise Edition
#define PRODUCT_STORAGE_EXPRESS_SERVER			0x00000014 	// Storage Server Express Edition
#define PRODUCT_STORAGE_STANDARD_SERVER			0x00000015 	// Storage Server Standard Edition
#define PRODUCT_STORAGE_WORKGROUP_SERVER		0x00000016 	// Storage Server Workgroup Edition
#define PRODUCT_UNDEFINED						0x00000000 	// An unknown product
#define PRODUCT_ULTIMATE						0x00000001 	// Ultimate Edition
#define PRODUCT_ULTIMATE_N						0x0000001C 	// Ultimate Edition
#define PRODUCT_WEB_SERVER						0x00000011 	// Web Server Edition
#endif
///
//
// CXWinVersion singleton class
//
class CXWinVersion
{
// Construction
public:
	CXWinVersion()
	{
		TRACE(_T("in CXWinVersion/n"));
		if (!m_bInitialized)
		{
			Init();
		}
		else
		{
			TRACE(_T("already initialized/n"));
		}
	}
// Attributes
public:
	int		GetMajorVersion()		{ return m_osinfo.dwMajorVersion; }
	int		GetMinorVersion()		{ return m_osinfo.dwMinorVersion; }
	int		GetBuildNumber()		{ return (m_osinfo.dwBuildNumber & 0xFFFF); }	// needed for 9x
	int		GetPlatformId()			{ return (m_osinfo.dwPlatformId); }
	int		GetServicePackNT();
	CString	GetServicePackString()	{ return m_osinfo.szCSDVersion; }
	CString GetVistaProductString();
	DWORD	GetVistaProductType();
	int		GetWinVersion();
	CString	GetWinVersionString();
	BOOL	IsWin95();
	BOOL	IsWin98();
	BOOL	IsWin2KorLater();
	BOOL	IsWin2003();
	BOOL	IsWinCE();
	BOOL	IsXP();
	BOOL	IsXPorLater();
	BOOL	IsXPHome();
	BOOL	IsXPPro();
	BOOL	IsXPSP2();
	BOOL	IsMediaCenter();
	BOOL	IsVista();
	BOOL	IsVistaHome();
	BOOL	IsVistaBusiness();
	BOOL	IsVistaEnterprise();
	BOOL	IsVistaUltimate();
// Implementation
private:
	void Init();
	struct OSVERSIONINFOEXX
	{  
		DWORD dwOSVersionInfoSize;  
		DWORD dwMajorVersion;  
		DWORD dwMinorVersion;  
		DWORD dwBuildNumber;  
		DWORD dwPlatformId;  
		TCHAR szCSDVersion[128];  
		WORD  wServicePackMajor;  
		WORD  wServicePackMinor;  
		WORD  wSuiteMask;  
		BYTE  wProductType;  
		BYTE  wReserved;
	};
	static BOOL m_bInitialized;
	static OSVERSIONINFOEXX m_osinfo;
	static DWORD m_dwVistaProductType;
};
///
//
// CXWinVersion instance
//
#ifndef XWINVER_CPP
// include an instance in each file;  the namespace insures uniqueness
namespace { CXWinVersion WinVersion; }
#endif
#endif //XWINVER_H

 

// XWinVer.cpp  Version 1.2
//
// Author:  Hans Dietrich
//          hdietrich@gmail.com
//
// Description:
//     XWinVer implements CXWinVersion, a singleton class to retrieve
//     the Windows OS version.  Please see article at 
//     www.codeproject.com.
//
// History
//     Version 1.1 - 2005 March 14
//     - Initial public release
//
//     Version 1.2 - 2007 June 7
//     - Added IsVista(), IsVistaXXXXX()
//     - Added GetVistaProductString()
//     - Added GetVistaProductType()
//     - Added GetPlatformId()
//     - Added IsMediaCenter()
//     - Added IsWin95()
//     - Added IsWin98()
//     - Added IsWinCE()
//
// Public APIs:
//             NAME                             DESCRIPTION
//     ---------------------   -------------------------------------------------
//     GetMajorVersion()       Get major version number
//     GetMinorVersion()       Get minor version number
//     GetBuildNumber()        Get build number (ANDed with 0xFFFF for Win9x)
//     GetServicePackNT()      Get service pack number
//     GetPlatformId()         Get platform id
//     GetServicePackString()  Get service pack string
//     GetVistaProductString() Get Vista product string (e.g., "Business Edition")
//     GetVistaProductType()   Get Vista product type
//     GetWinVersion()         Get windows version (CXWinVersion code)
//     GetWinVersionString()   Get windows version as string
//     IsMediaCenter()         TRUE = Media Center Edition
//     IsWin95()               TRUE = Win95
//     IsWin98()               TRUE = Win98
//     IsWin2KorLater()        TRUE = Win2000 or later
//     IsWin2003()             TRUE = Win2003
//     IsWinCE()               TRUE = WinCE
//     IsXP()                  TRUE = XP
//     IsXPorLater()           TRUE = XP or later
//     IsXPHome()              TRUE = XP Home
//     IsXPPro()               TRUE = XP Pro
//     IsXPSP2()               TRUE = XP SP2
//     IsVista()               TRUE = Vista
//     IsVistaHome()           TRUE = Vista Home
//     IsVistaBusiness()       TRUE = Vista Business
//     IsVistaEnterprise()     TRUE = Vista Enterprise
//     IsVistaUltimate()       TRUE = Vista Ultimate
//
// License:
//     This software is released into the public domain.  You are free to use
//     it in any way you like, except that you may not sell this source code.
//
//     This software is provided "as is" with no expressed or implied warranty.
//     I accept no liability for any damage or loss of business that this
//     software may cause.
//
///
#include "stdafx.h"
#define XWINVER_CPP
#include "XWinVer.h"
// from winbase.h
#ifndef VER_PLATFORM_WIN32_WINDOWS
#define VER_PLATFORM_WIN32_WINDOWS      1
#endif
#ifndef VER_PLATFORM_WIN32_NT
#define VER_PLATFORM_WIN32_NT           2
#endif
#ifndef VER_PLATFORM_WIN32_CE
#define VER_PLATFORM_WIN32_CE           3
#endif
// from winnt.h
#ifndef VER_NT_WORKSTATION
#define VER_NT_WORKSTATION              0x0000001
#endif
#ifndef VER_SUITE_PERSONAL
#define VER_SUITE_PERSONAL              0x00000200
#endif
///
/*
    This table has been assembled from Usenet postings, personal
    observations, and reading other people's code.  Please feel
    free to add to it or correct it.
         dwPlatFormID  dwMajorVersion  dwMinorVersion  dwBuildNumber
95             1              4               0             950
95 SP1         1              4               0        >950 && <=1080
95 OSR2        1              4             <10           >1080
98             1              4              10            1998
98 SP1         1              4              10       >1998 && <2183
98 SE          1              4              10          >=2183
ME             1              4              90            3000
NT 3.51        2              3              51            1057
NT 4           2              4               0            1381
2000           2              5               0            2195
XP             2              5               1            2600
2003           2              5               2            3790
Vista          2              6               0
CE 1.0         3              1               0
CE 2.0         3              2               0
CE 2.1         3              2               1
CE 3.0         3              3               0
*/
///
//  per process data
BOOL CXWinVersion::m_bInitialized = FALSE;
CXWinVersion::OSVERSIONINFOEXX CXWinVersion::m_osinfo = { 0 };
DWORD CXWinVersion::m_dwVistaProductType = 0;
///
// Init
void CXWinVersion::Init()
{
	TRACE(_T("in CXWinVersion::Init/n"));
	m_dwVistaProductType = 0;
	ZeroMemory(&m_osinfo, sizeof(m_osinfo));
	m_osinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
	if (GetVersionEx((LPOSVERSIONINFO) &m_osinfo))
	{
		m_bInitialized = TRUE;
		if ((m_osinfo.dwPlatformId == VER_PLATFORM_WIN32_NT) &&
			(m_osinfo.dwMajorVersion >= 5))
		{
			// get extended version info for 2000 and later
			ZeroMemory(&m_osinfo, sizeof(m_osinfo));
			m_osinfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
			GetVersionEx((LPOSVERSIONINFO) &m_osinfo);
			TRACE(_T("dwMajorVersion =%u/n"), m_osinfo.dwMajorVersion );
			TRACE(_T("dwMinorVersion =%u/n"), m_osinfo.dwMinorVersion );
			TRACE(_T("dwBuildNumber=%u/n"), m_osinfo.dwBuildNumber);
			TRACE(_T("suite mask=%u/n"), m_osinfo.wSuiteMask);
			TRACE(_T("product type=%u/n"), m_osinfo.wProductType);
			TRACE(_T("sp major=%u/n"), m_osinfo.wServicePackMajor);
			TRACE(_T("sp minor=%u/n"), m_osinfo.wServicePackMinor);
		}
	}
}
///
// GetWinVersionString
CString CXWinVersion::GetWinVersionString()
{
	CString strVersion = WUNKNOWNSTR;
	int nVersion = GetWinVersion();
	switch (nVersion)
	{
		default:
		case WUNKNOWN:								break;
		case W95:		strVersion = W95STR;		break;
		case W95SP1:	strVersion = W95SP1STR;		break;
		case W95OSR2:	strVersion = W95OSR2STR;	break;
		case W98:		strVersion = W98STR;		break;
		case W98SP1:	strVersion = W98SP1STR;		break;
		case W98SE:		strVersion = W98SESTR;		break;
		case WME:		strVersion = WMESTR;		break;
		case WNT351:	strVersion = WNT351STR;		break;
		case WNT4:		strVersion = WNT4STR;		break;
		case W2K:		strVersion = W2KSTR;		break;
		case WXP:		strVersion = WXPSTR;		break;
		case W2003:		strVersion = W2003STR;		break;
		case WVISTA:	strVersion = WVISTASTR;		break;
		case WCE:		strVersion = WCESTR;		break;
	}
	return strVersion;
}
///
// GetWinVersion
int CXWinVersion::GetWinVersion()
{
	int nVersion = WUNKNOWN;
	DWORD dwPlatformId   = m_osinfo.dwPlatformId;
	DWORD dwMinorVersion = m_osinfo.dwMinorVersion;
	DWORD dwMajorVersion = m_osinfo.dwMajorVersion;
	DWORD dwBuildNumber  = m_osinfo.dwBuildNumber & 0xFFFF;	// Win 9x needs this
	if ((dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) && (dwMajorVersion == 4))
	{
		if ((dwMinorVersion < 10) && (dwBuildNumber == 950))
		{
			nVersion = W95;
		}
		else if ((dwMinorVersion < 10) &&
				((dwBuildNumber > 950) && (dwBuildNumber <= 1080)))
		{
			nVersion = W95SP1;
		}
		else if ((dwMinorVersion < 10) && (dwBuildNumber > 1080))
		{
			nVersion = W95OSR2;
		}
		else if ((dwMinorVersion == 10) && (dwBuildNumber == 1998))
		{
			nVersion = W98;
		}
		else if ((dwMinorVersion == 10) &&
				((dwBuildNumber > 1998) && (dwBuildNumber < 2183)))
		{
			nVersion = W98SP1;
		}
		else if ((dwMinorVersion == 10) && (dwBuildNumber >= 2183))
		{
			nVersion = W98SE;
		}
		else if (dwMinorVersion == 90)
		{
			nVersion = WME;
		}
	}
	else if (dwPlatformId == VER_PLATFORM_WIN32_NT)
	{
		if ((dwMajorVersion == 3) && (dwMinorVersion == 51))
		{
			nVersion = WNT351;
		}
		else if ((dwMajorVersion == 4) && (dwMinorVersion == 0))
		{
			nVersion = WNT4;
		}
		else if ((dwMajorVersion == 5) && (dwMinorVersion == 0))
		{
			nVersion = W2K;
		}
		else if ((dwMajorVersion == 5) && (dwMinorVersion == 1))
		{
			nVersion = WXP;
		}
		else if ((dwMajorVersion == 5) && (dwMinorVersion == 2))
		{
			nVersion = W2003;
		}
		else if ((dwMajorVersion == 6) && (dwMinorVersion == 0))
		{
			nVersion = WVISTA;
			GetVistaProductType();
		}
	}
	else if (dwPlatformId == VER_PLATFORM_WIN32_CE)
	{
		nVersion = WCE;
	}
	return nVersion;
}
///
// GetServicePackNT - returns a valid service pack number only for NT platform
int CXWinVersion::GetServicePackNT()
{
	int nServicePack = 0;
	for (int i = 0;
		 (m_osinfo.szCSDVersion[i] != _T('/0')) &&
			 (i < (sizeof(m_osinfo.szCSDVersion)/sizeof(TCHAR)));
		 i++)
	{
		if (_istdigit(m_osinfo.szCSDVersion[i]))
		{
			nServicePack = _ttoi(&m_osinfo.szCSDVersion[i]);
			break;
		}
	}
	return nServicePack;
}
///
// IsXP
BOOL CXWinVersion::IsXP()
{
	if (GetWinVersion() == WXP)
	{
		return TRUE;
	}
	return FALSE;
}
///
// IsXPHome
BOOL CXWinVersion::IsXPHome()
{
	if (GetWinVersion() == WXP)
	{
		if (m_osinfo.wSuiteMask & VER_SUITE_PERSONAL)
			return TRUE;
	}
	return FALSE;
}
///
// IsXPPro
BOOL CXWinVersion::IsXPPro()
{
	if (GetWinVersion() == WXP)
	{
		if ((m_osinfo.wProductType == VER_NT_WORKSTATION) && !IsXPHome())
			return TRUE;
	}
	return FALSE;
}
///
// IsXPSP2
BOOL CXWinVersion::IsXPSP2()
{
	if (GetWinVersion() == WXP)
	{
		if (GetServicePackNT() == 2)
			return TRUE;
	}
	return FALSE;
}
#ifndef SM_MEDIACENTER
#define SM_MEDIACENTER          87
#endif
///
// IsMediaCenter
BOOL CXWinVersion::IsMediaCenter()
{
	if (GetSystemMetrics(SM_MEDIACENTER))
		return TRUE;
	return FALSE;
}
///
// IsWin2003
BOOL CXWinVersion::IsWin2003()
{
	if ((m_osinfo.dwPlatformId == VER_PLATFORM_WIN32_NT) && 
		(m_osinfo.dwMajorVersion == 5) &&
		(m_osinfo.dwMinorVersion == 2))
		return TRUE;
	return FALSE;
}
///
// GetVistaProductType
DWORD CXWinVersion::GetVistaProductType()
{
	if (m_dwVistaProductType == 0)
	{
		typedef BOOL (FAR PASCAL * lpfnGetProductInfo) (DWORD, DWORD, DWORD, DWORD, PDWORD);
		HMODULE hKernel32 = GetModuleHandle(_T("KERNEL32.DLL"));
		if (hKernel32)
		{
			lpfnGetProductInfo pGetProductInfo = (lpfnGetProductInfo) GetProcAddress(hKernel32, "GetProductInfo"); 
			if (pGetProductInfo)
				pGetProductInfo(6, 0, 0, 0, &m_dwVistaProductType);
		}  
	}
	return m_dwVistaProductType;
}
///
// GetVistaProductString
CString CXWinVersion::GetVistaProductString()
{
	CString strProductType = _T("");
	switch (m_dwVistaProductType)
	{
		case PRODUCT_BUSINESS:						 strProductType = _T("Business Edition"); break;
		case PRODUCT_BUSINESS_N:					 strProductType = _T("Business Edition"); break;
		case PRODUCT_CLUSTER_SERVER:				 strProductType = _T("Cluster Server Edition"); break;
		case PRODUCT_DATACENTER_SERVER:				 strProductType = _T("Server Datacenter Edition (full installation)"); break;
		case PRODUCT_DATACENTER_SERVER_CORE:		 strProductType = _T("Server Datacenter Edition (core installation)"); break;
		case PRODUCT_ENTERPRISE:					 strProductType = _T("Enterprise Edition"); break;
		case PRODUCT_ENTERPRISE_N:					 strProductType = _T("Enterprise Edition"); break;
		case PRODUCT_ENTERPRISE_SERVER:				 strProductType = _T("Server Enterprise Edition (full installation)"); break;
		case PRODUCT_ENTERPRISE_SERVER_CORE:		 strProductType = _T("Server Enterprise Edition (core installation)"); break;
		case PRODUCT_ENTERPRISE_SERVER_IA64:		 strProductType = _T("Server Enterprise Edition for Itanium-based Systems"); break;
		case PRODUCT_HOME_BASIC:					 strProductType = _T("Home Basic Edition"); break;
		case PRODUCT_HOME_BASIC_N:					 strProductType = _T("Home Basic Edition"); break;
		case PRODUCT_HOME_PREMIUM:					 strProductType = _T("Home Premium Edition"); break;
		case PRODUCT_HOME_PREMIUM_N:				 strProductType = _T("Home Premium Edition"); break;
		case PRODUCT_HOME_SERVER:					 strProductType = _T("Home Server Edition"); break;
		case PRODUCT_SERVER_FOR_SMALLBUSINESS:		 strProductType = _T("Server for Small Business Edition"); break;
		case PRODUCT_SMALLBUSINESS_SERVER:			 strProductType = _T("Small Business Server"); break;
		case PRODUCT_SMALLBUSINESS_SERVER_PREMIUM:	 strProductType = _T("Small Business Server Premium Edition"); break;
		case PRODUCT_STANDARD_SERVER:				 strProductType = _T("Server Standard Edition (full installation)"); break;
		case PRODUCT_STANDARD_SERVER_CORE:			 strProductType = _T("Server Standard Edition (core installation)"); break;
		case PRODUCT_STARTER:						 strProductType = _T("Starter Edition"); break;
		case PRODUCT_STORAGE_ENTERPRISE_SERVER:		 strProductType = _T("Storage Server Enterprise Edition"); break;
		case PRODUCT_STORAGE_EXPRESS_SERVER:		 strProductType = _T("Storage Server Express Edition"); break;
		case PRODUCT_STORAGE_STANDARD_SERVER:		 strProductType = _T("Storage Server Standard Edition"); break;
		case PRODUCT_STORAGE_WORKGROUP_SERVER:		 strProductType = _T("Storage Server Workgroup Edition"); break;
		case PRODUCT_UNDEFINED:						 strProductType = _T("An unknown product"); break;
		case PRODUCT_ULTIMATE:						 strProductType = _T("Ultimate Edition"); break;
		case PRODUCT_ULTIMATE_N:					 strProductType = _T("Ultimate Edition"); break;
		case PRODUCT_WEB_SERVER:					 strProductType = _T("Web Server Edition"); break;
		default: break;
	}
	return strProductType;
}
///
// IsVista
BOOL CXWinVersion::IsVista()
{
	if (GetWinVersion() == WVISTA)
	{
		return TRUE;
	}
	return FALSE;
}
///
// IsVistaHome
BOOL CXWinVersion::IsVistaHome()
{
	if (GetWinVersion() == WVISTA)
	{
		switch (m_dwVistaProductType)
		{
			case PRODUCT_HOME_BASIC:	
			case PRODUCT_HOME_BASIC_N:	
			case PRODUCT_HOME_PREMIUM:	
			case PRODUCT_HOME_PREMIUM_N:
			case PRODUCT_HOME_SERVER:	
				return TRUE;
		}
	}
	return FALSE;
}
///
// IsVistaBusiness
BOOL CXWinVersion::IsVistaBusiness()
{
	if (GetWinVersion() == WVISTA)
	{
		switch (m_dwVistaProductType)
		{
			case PRODUCT_BUSINESS:	
			case PRODUCT_BUSINESS_N:
				return TRUE;
		}
	}
	return FALSE;
}
///
// IsVistaEnterprise
BOOL CXWinVersion::IsVistaEnterprise()
{
	if (GetWinVersion() == WVISTA)
	{
		switch (m_dwVistaProductType)
		{
			case PRODUCT_ENTERPRISE:			
			case PRODUCT_ENTERPRISE_N:			
			case PRODUCT_ENTERPRISE_SERVER:		
			case PRODUCT_ENTERPRISE_SERVER_CORE:
			case PRODUCT_ENTERPRISE_SERVER_IA64:
				return TRUE;
		}
	}
	return FALSE;
}
///
// IsVistaUltimate
BOOL CXWinVersion::IsVistaUltimate()
{
	if (GetWinVersion() == WVISTA)
	{
		switch (m_dwVistaProductType)
		{
			case PRODUCT_ULTIMATE:	
			case PRODUCT_ULTIMATE_N:
				return TRUE;
		}
	}
	return FALSE;
}
///
// IsWin2KorLater
BOOL CXWinVersion::IsWin2KorLater()
{
	if ((m_osinfo.dwPlatformId == VER_PLATFORM_WIN32_NT) && 
		(m_osinfo.dwMajorVersion >= 5))
		return TRUE;
	return FALSE;
}
///
// IsXPorLater
BOOL CXWinVersion::IsXPorLater()
{
	if ((m_osinfo.dwPlatformId == VER_PLATFORM_WIN32_NT) && 
		(((m_osinfo.dwMajorVersion == 5) && (m_osinfo.dwMinorVersion > 0)) || 
		(m_osinfo.dwMajorVersion > 5)))
		return TRUE;
	return FALSE;
}
///
// IsWin95
BOOL CXWinVersion::IsWin95()
{
	if ((m_osinfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) && 
		(m_osinfo.dwMajorVersion == 4) && 
		(m_osinfo.dwMinorVersion < 10))
		return TRUE;
	return FALSE;
}
///
// IsWin98
BOOL CXWinVersion::IsWin98()
{
	if ((m_osinfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) && 
		(m_osinfo.dwMajorVersion == 4) && 
		(m_osinfo.dwMinorVersion >= 10))
		return TRUE;
	return FALSE;
}
///
// IsWinCE
BOOL CXWinVersion::IsWinCE()
{
	return (GetWinVersion() == WCE);
}