如何得到Windows操作系统版本信息(包括2003 R2、Vista和Windows 2008 Server)

本文介绍了一段C++代码,用于在Windows环境下获取操作系统版本信息,包括Windows 2000、Windows XP、Windows 2003以及Vista和Windows 2008 Server等。代码中通过GetVersionExW API和GetProductInfo函数来识别不同版本的Windows,并提供了详细的版本信息,如专业版、服务器版等。
摘要由CSDN通过智能技术生成
    在程序中判断Windows版本这本应该是一个极其简单的API就能完成的工作,但由于微软的失误,使得Windows操作系统家族的版本正变得混乱不堪,一个最新的例子是Windows Vista和Windows 2008 Server的版本均为6.0。上世纪90年代Windows 9x和Windows NT的版本混乱主要是因为程序员的错误(或失误)导致的,那么这一次的版本混乱又是因为什么导致的?如果是某些人为的决定导致这样的结果,我只能说这个决定是极其愚蠢的,因为这个愚蠢的决定已经导致版本的意义完全失去了。
    废话不多说了,直接贴代码,以下代码可在Vs2005/Vs2008下编译通过。


#include 
" stdafx.h "
#include 
< windows.h >
#include 
< tchar.h >
#include 
< stdio.h >

#ifndef WSTR
#define  WSTR(x) L##x
#endif  

#ifndef SM_SERVERR2
#define  SM_SERVERR2 89
#endif  

//  前置声明
WCHAR *  GetOperationSystemInfoOld( WCHAR *  szBuffer,size_t szLength);

//  GetNativeSystemInfo函数原型(WOW64) (XP,Vista,2003,2008)
typedef  void  (WINAPI  * PGNSI)(LPSYSTEM_INFO lpSystemInfo);

//  GetProductInfo函数原型(Vista/2008)
typedef BOOL (WINAPI  * PGPI)(DWORD dwOSMajorVersion, DWORD dwOSMinorVersion, DWORD dwSpMajorVersion, DWORD dwSpMinorVersion, PDWORD pdwReturnedProductType);

//  ProductType常量
#define  PRODUCT_UNDEFINED                            0x00000000     //  An unknown product
#define  PRODUCT_ULTIMATE                            0x00000001     //  Ultimate Edition
#define  PRODUCT_HOME_BASIC                            0x00000002     //  Home Basic Edition
#define  PRODUCT_HOME_PREMIUM                        0x00000003     //  Home Premium Edition
#define PRODUCT_ENTERPRISE                            0x00000004     //  Enterprise Edition
#define  PRODUCT_HOME_BASIC_N                        0x00000005     //  Home Basic Edition
#define  PRODUCT_BUSINESS                            0x00000006     //  Business Edition
#define  PRODUCT_STANDARD_SERVER                        0x00000007     //  Server Standard Edition (full installation)
#define  PRODUCT_DATACENTER_SERVER                    0x00000008     //  Server Datacenter Edition (full installation)
#define  PRODUCT_SMALLBUSINESS_SERVER                0x00000009     //  Small Business Server
#define  PRODUCT_ENTERPRISE_SERVER                    0x0000000A     //  Server Enterprise Edition (full installation)
#define  PRODUCT_STARTER                                0x0000000B     //  Starter Edition
#define  PRODUCT_DATACENTER_SERVER_CORE                0x0000000C     //  Server Datacenter Edition (core installation)
#define  PRODUCT_STANDARD_SERVER_CORE                0x0000000D     //  Server Standard Edition (core 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_BUSINESS_N                            0x00000010     //  Business Edition
#define  PRODUCT_WEB_SERVER                            0x00000011     //  Web Server Edition (full installation)
#define  PRODUCT_CLUSTER_SERVER                        0x00000012     //  Cluster Server Edition
#define  PRODUCT_HOME_SERVER                            0x00000013     //  Home Server 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_STORAGE_ENTERPRISE_SERVER            0x00000017     //  Storage Server Enterprise Edition
#define  PRODUCT_SERVER_FOR_SMALLBUSINESS            0x00000018     //  Server for Small Business Edition
#define  PRODUCT_SMALLBUSINESS_SERVER_PREMIUM        0x00000019     //  Small Business Server Premium Edition
#define  PRODUCT_HOME_PREMIUM_N                        0x0000001A     //  Home Premium Edition
#define  PRODUCT_ENTERPRISE_N                        0x0000001B     //  Enterprise Edition
#define  PRODUCT_ULTIMATE_N                            0x0000001C     //  Ultimate Edition
#define  PRODUCT_WEB_SERVER_CORE                        0x0000001D     //  Web Server Edition (core installation)
#define  PRODUCT_UNLICENSED                            0xABCDABCD     //  Unlicensed edition


///   <summary>  
///         获得操作系统的信息(2000以前)。
///   </summary>  
///   <param name="szBuffer">
///         用于保存信息的缓冲区(必须足够大)。
///   </param>
///   <returns>
///         返回操作系统信息。
///   </returns>
WCHAR *  GetOperationSystemInfoOld( WCHAR *  szBuffer,size_t szLength)
{
    
//  获得操作系统版本信息
    OSVERSIONINFOW osvi             =  {  0  };
    osvi.dwOSVersionInfoSize    
=   sizeof ( OSVERSIONINFOW );
    
if ! GetVersionExW(  & osvi ) )
    {
        szBuffer[
0 =  WSTR(  ' '  );
        
return  szBuffer;
    }
    LPWSTR pszTemp            
=  szBuffer;
    size_t szTempLen        
=  szLength;
    
int     iLength             =   0 ;

    
//  Windows Me, Windows 98, or Windows 95
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值