GetVersionEx函数

0x01.GetVersionEx函数

0x01.原型

BOOL WINAPI GetVersionEx(
  _Inout_ LPOSVERSIONINFO lpVersionInfo
);

0x02.参数

lpVersionInfo [in, out]
    An `OSVERSIONINFO` or `OSVERSIONINFOEX` structure that receives the operating system information.
    Before calling the `GetVersionEx` function, set the `dwOSVersionInfoSize` member of the structure as appropriate to indicate which data structure is being passed to this function.

0x03.返回值

If the function succeeds, the return value is a nonzero value.
If the function fails, the return value is zero. To get extended error information, call GetLastError. The function fails if you specify an invalid value for the dwOSVersionInfoSize member of the OSVERSIONINFO or OSVERSIONINFOEX structure.

0x02.结构OSVERSIONINFOEX:

typedef struct {  
    DWORD dwOSVersionInfoSize;       //在使用GetVersionEx之前要将此初始化为结构的大小  
    DWORD dwMajorVersion;            //系统主版本号  
    DWORD dwMinorVersion;            //系统次版本号  
    DWORD dwBuildNumber;             //系统构建号  
    DWORD dwPlatformId;              //系统支持的平台  
    TCHAR szCSDVersion[128];         //系统补丁包的名称  
    WORD wServicePackMajor;          //系统补丁包的主版本  
    WORD wServicePackMinor;          //系统补丁包的次版本  
    WORD wSuiteMask;                 //标识系统上的程序组  
    BYTE wProductType;               //标识系统类型  
    BYTE wReserved;                  //保留,未使用  
} OSVERSIONINFOEX, *POSVERSIONINFOEX;  

这里写图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Windows 8 和 Windows Server 2012 以及更高版本中,Microsoft 引入了 GetVersionEx 函数的替代品。新的函数名为 VerifyVersionInfo,它更加灵活,可以检查操作系统的版本、内部版本号、服务包级别、产品类型和系统架构等信息。这个函数可以用来代替 GetVersionEx 函数,但需要使用一些结构体和常量来指定要检查的操作系统版本信息。以下是一个示例代码: ```c++ #include <Windows.h> int main() { OSVERSIONINFOEX osvi; DWORDLONG dwlConditionMask = 0; int op = VER_GREATER_EQUAL; ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX)); osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX); osvi.dwMajorVersion = 10; osvi.dwMinorVersion = 0; osvi.wServicePackMajor = 0; osvi.wServicePackMinor = 0; osvi.wProductType = VER_NT_WORKSTATION; VER_SET_CONDITION(dwlConditionMask, VER_MAJORVERSION, op); VER_SET_CONDITION(dwlConditionMask, VER_MINORVERSION, op); VER_SET_CONDITION(dwlConditionMask, VER_SERVICEPACKMAJOR, op); VER_SET_CONDITION(dwlConditionMask, VER_SERVICEPACKMINOR, op); VER_SET_CONDITION(dwlConditionMask, VER_PRODUCT_TYPE, op); if (VerifyVersionInfo(&osvi, VER_MAJORVERSION | VER_MINORVERSION | VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR | VER_PRODUCT_TYPE, dwlConditionMask)) printf("This is Windows 10\n"); else printf("This is not Windows 10\n"); return 0; } ``` 这个示例代码使用 VerifyVersionInfo 函数来检查操作系统是否为 Windows 10。它先设置了一个 OSVERSIONINFOEX 结构体,指定了要检查的版本信息。然后使用 VER_SET_CONDITION 宏设置条件掩码,指定了要检查哪些版本信息和比较操作符。最后调用 VerifyVersionInfo 函数,传入 OSVERSIONINFOEX 结构体、条件掩码和条件掩码的值,检查操作系统版本是否符合条件。 ### 回答2: 旧版本中的GetVersionEx函数已经从Windows 8.1开始被废弃。取而代之的是通过使用更现代的方式获取操作系统版本信息。以下是替代GetVersionEx的方法: 1. 使用函数IsWindowsVersionOrGreater IsWindowsVersionOrGreater是一个用于判断操作系统版本的函数,可以判断当前操作系统是否高于或等于指定版本。通过使用这个函数,您可以取代GetVersionEx函数来确定操作系统的版本。 2. 使用函数VerifyVersionInfo VerifyVersionInfo函数是另一个用于判断操作系统版本的函数,与IsWindowsVersionOrGreater函数类似,但它提供了更多的灵活性和控制能力。使用VerifyVersionInfo函数可以比较操作系统版本的多个属性,如主版本号、次版本号、构建号和服务包级别,以确定操作系统的版本。 3. 使用版本清单 Windows操作系统支持使用版本清单文件来指定应用程序兼容的操作系统版本。您可以在应用程序的清单文件中添加相关信息,以指定支持的最低操作系统版本,从而替代GetVersionEx函数。 以上方法中,IsWindowsVersionOrGreater和VerifyVersionInfo函数是最常用的替代方案。根据具体的需求,您可以选择适合自己的方法来获取操作系统的版本信息。请注意,这些方法可以提供更准确和灵活的版本信息,但也可能需要更多的代码和处理逻辑进行判断和处理。 ### 回答3: GetVersionEx 是一个过时的函数,它用于获取操作系统的版本信息。替代该函数的方法是使用不同的函数和API来获取相应的信息。 一种替代方法是使用 VerifyVersionInfo 函数。与 GetVersionEx 不同,VerifyVersionInfo 函数支持 Windows 8 及更高版本操作系统。该函数可以用于验证操作系统的版本和建设号,以判断当前系统是否满足要求。对于不同的操作系统版本,我们可以使用不同的判断方式。例如,通过判断系统是否为 Windows 10 可以使用 VER_MAJORVERSION 和 VER_MINORVERSION 属性,通过判断系统的建设号可以使用 VER_BUILDNUMBER 属性。 另一个替代方法是使用 GetVersionEx 函数的后续版本 - GetVersionExA 或 GetVersionExW。这两个函数与 GetVersionEx 稍有不同,它们可以带有特定标志来检索更详细的版本信息。但需要注意的是,从 Windows 8 开始,微软已将 GetVersionExA 和 GetVersionExW 函数标记为过时。 除了上面提到的方法,还有其他一些替代 GetVersionEx 函数的工具和API,比如 WMI (Windows Management Instrumentation)、RegGetValue 和 EnumDisplayDevices。这些工具和API提供了更灵活和精确的方式来获取操作系统的版本和其他系统信息。 综上所述,尽管 GetVersionEx 是一个过时的函数,但我们有很多替代方法和工具来获取操作系统的版本信息。我们可以根据具体的需求选择合适的方法来替代 GetVersionEx 函数

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值