热情软件屋

 

程序如何才能识别目前的操作系统环境


编号:QA000014
建立日期: 1998年1月1日 最后修改日期:1998年1月1日
所属类别:

肖睿:
    Windows系列产品如此之多: 16bits:Windows 3.0/3.1/3.2/3.11、16及32bits:Windows 95(英文版/GBK/BIG5/日文版/韩文版/...)、32bits:Windows NT 3.5/3.51/4.0(英文版/中文版/... )...所有以上这些版本,在写程序时该如何区分,即程序如何才能识别目前的操作系统环境?
    

回答:

    我在QA000011 "如何在VB程序中确定Win 95的语种"介绍过了区分Windows的不同语言版本的方法,这里不在赘述。下面,我们分16位和32位两种情况介绍一下获得版本号的办法。
    16位程序通常是使用Windows中的GetVersion()函数是用来获取Windows及DOS版本号的,这个函数的返回值是一个四个字节的DWORD类型。低位字节返回Windows主版本号。返回值的低位字的高位字节说明Windows的副版本号,高位字的低位字节说明DOS的副版本号,高位字的高位字节说明DOS的主版本号。比如说,在Windows 95下调用这一函数返回0x07005F03。高位字0x0700说明DOS版本为7.00。低位字的低位字节0x03,低位字节0x5F(十进制95),也就是说Windows 95的Windows版本号为3.95(注意不是4.0)。下表是各版本的Windows 的GetVersion()的返回值:
    

Windows版本号 DOS版本号
Windows 3.x 实际的Windows版本号 实际的DOS版本号
Windows for Workgroup 3.11 3.10 实际的DOS版本号
Windows NT(16位Windows,或称WOW) 3.10 5.0
Windows 95 3.95 7.0
Windows 95 OSR2 3.95 7.1
GetVersion()是标准的Windows版本信息函数,但它返回的值并不总是“真实”的。例如出于兼容性的考虑,Windows for Workgroup 3.11(注意这和Windows 3.11是两个不同的版本)返回的版本号是3.10,不是3.11。你可以使用GetFileVersionInfo()函数来获得USER.EXE的版本号,它返回的将是3.11。Windows 3.2中文版返回的版本号是3.10,而不是3.20,这倒不是技术原因,而是因为Windows 3.2是在Windows 3.10的基础上汉化的。如果想知道程序是否运行在Windows NT环境下,16位程序可以调用WinFlags()函数,用返回值同WF_WINNT相与,如果不为零说明运行在Windows NT中。如果你的C++系统中没有定义WF_WINNT常数,可以加上下面这句: #define WF_WINNT 0x4000 32位程序仍可以使用GetVersion()函数,但返回值同16位不同。32位软件最好使用GetVersionEx()函数。这个函数使用OSVERSIONINFO结构,该结构是如下定义的: typedef struct _OSVERSIONINFO{ DWORD dwOSVersionInfoSize; DWORD dwMajorVersion; // 主版本号 DWORD dwMinorVersion; // 副版本号 DWORD dwBuildNumber; // Build号 DWORD dwPlatformId; TCHAR szCSDVersion[ 128 ]; } OSVERSIONINFO; 在Windows 95上,dwMajorVersion为4,dwMinorVersion为0,dwBuildNumber为950,也就是说Windows 95的版本号为4.00.950。dwPlatformId是用来区分Windows 95、Windows NT和Win32s。其取值含义如下:
    
    
    
    
    
    
    
    
    
    
    
    
    
    
取值 含义
VER_PLATFORM_WIN32s Win32s on Windows 3.1
VER_PLATFORM_WIN32_WINDOWS Win32 on Windows 95
VER_PLATFORM_WIN32_NT Win32 on Windows NT

     若想区别Windows 95与Windows 95 OSR2,要看dwBuildNumber,如果dwBuildNumber的低位字大于1080,则系统为Windows 95 OSR2或更高版本。在Win32中不再支持WinFlags()函数。 尽管GetVersionEx()函数和GetVersion ()函数是Windows提供的标准的版本函数,但在实际编程使用GetFileVersionInfo()函数有时更方便。 相关问题: QA003296 "如何利用GETVERSIONEX获得WINDOWS的版本号码"

此问题由李海回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio