C++中使用IsWindowsVersionOrGreater检测Windows 11需要传入什么参数
调用参数及注意事项
首先明确:IsWindowsVersionOrGreater 本身仅支持校验系统主版本号、次版本号、服务包主版本号,而Windows 11和Windows 10的主版本号均为10、次版本号均为0、无服务包版本区分,仅靠该API的三个参数无法直接区分Win10和Win11,你需要配合Build版本号校验实现精准检测。
第一步:调用IsWindowsVersionOrGreater过滤低版本系统
传入参数如下:
- wMajorVersion:
10 - wMinorVersion:
0 - wServicePackMajor:
0
调用代码示例:
if (!IsWindowsVersionOrGreater(10, 0, 0)) { // 低于Win10系统,直接走旧版UI逻辑 return false; }
第二步:补充校验系统Build版本号
Win11的首个正式发布版本Build号为22000,只要系统Build号大于等于22000即可判定为Win11及以上系统。
获取Build号可以用RtlGetVersion或者GetVersionEx(注意要在程序manifest中添加Win11的兼容声明,否则系统会出于兼容旧程序的目的返回旧版本号,导致检测失效),示例逻辑:
OSVERSIONINFOEXW osvi = { sizeof(osvi) }; GetVersionExW((LPOSVERSIONINFOW)&osvi); if (osvi.dwBuildNumber >= 22000) { // 判定为Win11及以上系统,走Win11专属UI逻辑 } else { // 判定为Win10系统,走旧版UI逻辑 }
重要提示:manifest中必须包含Windows 11对应的兼容GUID,否则无法获取到真实的系统版本号。
内容的提问来源于stack exchange,提问作者MAG
相关产品推荐
相关产品推荐

