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

    在程序中判断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
    评论
[Info] Name=INTL Version=1.00.000 DiskSpace=8000 ;DiskSpace requirement in KB [Startup] CmdLine= SuppressWrongOS=Y ScriptDriven=2 ScriptVer=15.0.0.498 DotNetOptionalInstallIfSilent=N OnUpgrade=0 RequireExactLangMatch=0404,0804 RTLLangs=0401,040d Product=SIMATIC CFC PackageName=Setup.msi EnableLangDlg=Y LogResults=N DoMaintenance=N ProductCode={5784DE5F-8F40-45A4-90D3-1E03B387997C} ProductVersion=07.01.0100 LauncherName=setup.exe PackageCode={C53F8AAB-B0E9-4C02-8734-C7E075939022} [MsiVersion] 2.0.2600.0=SupportOS [SupportOSMsi11] ;Supported platforms for MSI 1.1 Win95=1 Win98=1 WinNT4SP3=1 [SupportOSMsi12] ;Supported platforms for MSI 1.2 Win95=1 Win98=1 WinME=1 WinNT4SP3=1 [SupportOS] ;Supported platforms for MSI 2.0 Win95=1 Win98=1 WinME=1 WinNT4SP6=1 Win2K=1 [SupportOSMsi30] ;Supported platforms for MSI 3.0 Win2KSP3=1 WinXP=1 Win2003Server=1 [Win95] MajorVer=4 MinorVer=0 MinorVerMax=1 BuildNo=950 PlatformId=1 [Win98] MajorVer=4 MinorVer=10 MinorVerMax=11 BuildNo=1998 PlatformId=1 [WinME] MajorVer=4 MinorVer=90 MinorVerMax=91 BuildNo=3000 PlatformId=1 [WinNT4SP3] MajorVer=4 MinorVer=0 MinorVerMax=1 BuildNo=1381 PlatformId=2 ServicePack=768 [WinNT4SP6] MajorVer=4 MinorVer=0 MinorVerMax=1 BuildNo=1381 PlatformId=2 ServicePack=1536 [Win2K] MajorVer=5 MinorVer=0 MinorVerMax=1 BuildNo=2195 PlatformId=2 [Win2KSP3] MajorVer=5 MinorVer=0 MinorVerMax=1 BuildNo=2195 PlatformId=2 ServicePack=768 [WinXP] MajorVer=5 MinorVer=1 MinorVerMax=2 BuildNo=2600 PlatformId=2 [Win2003Server] MajorVer=5 MinorVer=2 MinorVerMax=3 BuildNo=2600 PlatformId=2 [0x0409] TITLE=Choose Setup Language DESCRIPTION=Select the language for this installation from the choices below. OK=OK Cancel=Cancel 0x0409=English (United States) 0x0411=Japanese 0x0401=Arabic (Saudi Arabia) 0x042d=Basque 0x0402=Bulgarian 0x0403=Catalan 0x0804=Chinese (PRC) 0x0404=Chinese (Taiwan) 0x041a=Croatian 0x0405=Czech 0x0406=Danish 0x0413=Dutch (Netherlands) 0x040b=Finnish 0x0c0c=French (Canada) 0x040c=French (France) 0x0407=German (Germany) 0x0408=Greek 0x040d=Hebrew 0x040e=Hungarian 0x0421=Indonesian 0x0410=Italian (Italy) 0x0412=Korean 0x0414=Norwegian (Bokmal) 0x0415=Polish 0x0416=Portuguese (Brazil) 0x0816=Portuguese (Portugal) 0x0418=Romanian 0x0419=Russian 0x0c1a=Serbian (Cyrillic) 0x041b=Slovak 0x0424=Slovenian 0x040a=Spanish (Traditional Sort) 0x041d=Swedish 0x041e=Thai 0x041f=Turkish [Languages] count=5 default=409 key0=40a key1=40c key2=410 key3=407 key4=409 [Setup.msi] Type=0 Location=Setup.msi [Setup.bmp] 0=Setup.bmp Type=0

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值