OSVERSIONINFO的用法及实例


 

快速信息

Windows NT   支持

Windows 95    支持

Win32s           支持

引入程序库    -

头文件           winbase.h

Unicode         WinNT

平台说明       无

 

概述-系统信息

微软的Win32应用程序编程接口(API)包含了描述当前操作系统配置的函数。

 

所属分组

系统信息结构体

以下结构体均用于检索或设置系统信息。

ANIMATIONINFO

HW_PROFILE_INFO

MINIMIZEDMETRICS

NONCLIENTMETRICS

OSVERSIONINFO

SYSTEM_INFO

 

使用说明

在OSVERSIONINFO数据结构中包含操作系统版本信息。这些信息包括主要和次要版本号,一个内部版本号,一个平台标识符,以及操作系统的说明性文本。GetVersionEx函数将使用这个结构体。

 

结构体原型:

 

typedef struct _OSVERSIONINFO{

    DWORD dwOSVersionInfoSize;

    DWORD dwMajorVersion;

    DWORD dwMinorVersion;

    DWORD dwBuildNumber;

    DWORD dwPlatformId;

    TCHAR szCSDVersion[ 128 ];

} OSVERSIONINFO;

 

成员说明:

 

dwOSVersionInfoSize

       以字节为单位,指定这个数据结构的大小。须在调用GetVersionEx(OSVERSIONINFO)函数之前,将这个成员设置为sizeof(OSVERSIONINFO)。

 

dwMajorVersion

       标识操作系统的主版本号。例如,对于Windows NT 3.51版,其主版本号为3;对于Windows NT 4.0版,其主版本号为4。

 

dwMinorVersion

       标识操作系统的次要版本号。例如,对于Windows NT 3.51版,其次要版本号为51;对于Windows NT 4.0版本,其次要版本号为0。

 

dwBuildNumber

       Windows NT:标识操作系统的内部版本号。

Windows 95:低位字标识操作系统数的内部版本号。高位字包含了主要和次要版本号。

 

dwPlatformId

       标识操作系统平台。这个成员可以是下列值之一:

值:                                                        平台:

VER_PLATFORM_WIN32s                         Win32s on Windows 3.1.

VER_PLATFORM_WIN32_WINDOWS        Win32 on Windows 95.

VER_PLATFORM_WIN32_NT                     Win32 on Windows NT.

 

szCSDVersion

       Windows NT:包含一个以NULL结尾的字符串,如“Service Pack 3”,就表明系统上安装了最新的Service Pack。如果没有安装Service Pack,该字符串为空。

     Windows 95:包含一个以NULL结尾的字符串,提供了对操作系统的任意补充信息。

 

参阅:

 

       GetVersionEx

 

int game::getsys()
{ OSVERSIONINFO stOSVI ;//一个获取操作系统版本信息的数据结构
 ZeroMemory(&stOSVI , sizeof ( OSVERSIONINFO )) ;
    stOSVI.dwOSVersionInfoSize = sizeof ( OSVERSIONINFO ) ;
    GetVersionEx ( &stOSVI);
 int a=0;
 if (stOSVI.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS &&
  (stOSVI.dwMajorVersion>4||(stOSVI.dwMajorVersion==4
   && stOSVI.dwMinorVersion>0)))
 a=1;
 if (VER_PLATFORM_WIN32_NT==stOSVI.dwPlatformId&&stOSVI.dwMajorVersion>=5)
 a=2;
 if (VER_PLATFORM_WIN32_NT==stOSVI.dwPlatformId&&stOSVI.dwMajorVersion==4)
 a=3;
 if (VER_PLATFORM_WIN32_NT==stOSVI.dwPlatformId)
 a=4;
 return a;
}




我们可以通过下列ISWin2k()函数来进行判断当前操作系统是不是WIN2K。 如果返回FALSE 则不是WIN2K系统。

BOOL IsWin2K(void)  
 
OSVERSIONINFO   OSVersionInfo;  
OSVersionInfo.dwOSVersionInfoSize=sizeof(OSVERSIONINFO);  
if(GetVersionEx   (&OSVersionInfo))  
    return((OSVersionInfo.dwPlatformId==VER_PLATFORM_WIN32_NT)&&(OSVersionInfo.dwMajorVersion==5)&&(OSVersionInfo.dwMinorVersion==0));
else
    return(FALSE);
  //   IsWin2K

 

 

OSVERSIONINFO 结构体的定义:

typedef OSVERSIONINFOW OSVERSIONINFO;
typedef struct _OSVERSIONINFOW {
    DWORD dwOSVersionInfoSize;    //指定该数据结构的字节大小
    DWORD dwMajorVersion;        //操作系统的主版本号   5代表2000以上版本
    DWORD dwMinorVersion;       //操作系统的副版本号    0代表win2000. 1代表winxp
    DWORD dwBuildNumber;       //操作系统的创建号
    DWORD dwPlatformId;         //操作系统ID号
    WCHAR szCSDVersion[ 128 ];  // Maintenance string for PSS usage    关于操作系统的一些附加信息
} OSVERSIONINFOW, *POSVERSIONINFOW, *LPOSVERSIONINFOW, RTL_OSVERSIONINFOW, *PRTL_OSVERSIONINFOW;

 

dwMajorVersion :

ValueMeaning

4

The operating system is Windows NT 4.0, Windows Me, Windows 98, or Windows 95.

5

The operating system is Windows Server 2003 R2, Windows Server 2003, Windows XP, or Windows 2000.

6

The operating system is Windows Vista or Windows Server 2008.

 

dwMinorVersion :

ValueMeaning

0

The operating system is Windows Vista, Windows Server 2008, Windows 2000, Windows NT 4.0, or Windows 95.

1

The operating system is Windows XP.

2

The operating system is Windows Server 2003 R2, Windows Server 2003, or Windows XP Professional x64 Edition.

10

The operating system is Windows 98.

90

The operating system is Windows Me.

 

dwPlatformId :
ValueMeaning

VER_PLATFORM_WIN32_NT
2

The operating system is Windows Vista, Windows Server 2008, Windows Server 2003, Windows XP, Windows 2000, or Windows NT.

VER_PLATFORM_WIN32_WINDOWS
1

The operating system is Windows Me, Windows 98, or Windows 95.

 

szCSDVersion

A null-terminated string, such as "Service Pack 3", that indicates the latest Service Pack installed on the system. If no Service Pack has been installed, the string is empty.

 

综上所述, 我们可以通过OSVERSIONINFO结构体和GetVersionEx 的配合使用。进行对操作系统的完整判断


  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Delphi获取Windows版本号、描述等信息,可获取到主版本号、次版本号、系统描述、系统平台、构建号等,相关代码如下:   //设置版本信息结构的大小    GetVersionEx(OSVI);    //获取版本信息    is98orlater:=    //判断是否98或以后版本    (osvi.dwPlatformId=VER_PLATFORM_WIN32_WINDOWS) and    ((osvi.dwMajorVersion>4) or    ((osvi.dwMajorVersion=4) and (osvi.dwMinorVersion>0)));   //DOWNLOAD BY HTTP://WWW.CODEFANS.NET    //下面开始显示信息    case OSVI.dwPlatformId of    //根据OSVI.dwPlatformId的数值的不同显示具体的平台描述    VER_PLATFORM_WIN32s:    // Windows 3.1平台    s:='Windows 3.1';    VER_PLATFORM_WIN32_WINDOWS:    // Windows 95/98平台    if(is98orlater) then    //98    s:='Windows 98'    else    //95    s:='Windows 95';    VER_PLATFORM_WIN32_NT:    // Windows NT平台    s:='Windows NT/XP';    end;    Edit1.Text:=s;    Edit2.Text:=IntToStr(OSVI.dwMajorVersion);    Edit3.Text:=IntToStr(OSVI.dwMinorVersion);    case OSVI.dwPlatformId of    //根据平台的不同具体处理OSVI.dwBuildNumber信息    VER_PLATFORM_WIN32_WINDOWS:    // Windows 95/98平台则取OSVI.dwBuildNumber的低位字    Edit4.Text:=IntToStr(LOWORD(OSVI.dwBuildNumber));    VER_PLATFORM_WIN32_NT:    // Windows NT平台则取所有位的值    Edit4.Text:=IntToStr(OSVI.dwBuildNumber);    else    Edit4.Text:='';   // Windows 3.1平台此值位空    end;    Edit5.Text:=OSVI.szCSDVersion;   end;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值