繁体   English   中英

如何获取 Windows 11 的操作系统版本信息

[英]How to get osversioninfo for windows 11

GetVersionEx Api可以在 C++ 中获取高达 Windows10 的版本。

#include <windows.h>
#include <stdio.h>

void main()
{
    OSVERSIONINFO osvi;    
    ZeroMemory(&osvi, sizeof(OSVERSIONINFO));
    osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);

    GetVersionEx(&osvi);
}

版本助手函数有一个IsWindows10OrGreater api,可以检查它是 Windows10 或更高版本,但我需要 Windows11 的版本信息。 是否有像 GetVersionEx 这样的 Api 从那里我可以获得 Windows11 的整个版本信息。

 typedef struct _OSVERSIONINFO{
    DWORD dwOSVersionInfoSize;
    DWORD dwMajorVersion;
    DWORD dwMinorVersion;
    DWORD dwBuildNumber;
    DWORD dwPlatformId;
    TCHAR szCSDVersion[ 128 ];
 } OSVERSIONINFO;

成员

为什么不使用 dwBuildNumber 来识别 Windows 11 版本,Windows 11 内部版本号从 22000 开始,您可以在线搜索您要查找的确切内部版本号。

直接(但不推荐的方式):不推荐使用GetVersionGetVersionEx 也就是说,如果您真的想检测 Windows 11,可以使用GetVersionEx返回的OSVERSIONINFOEXdwBuildNumber成员。在Windows 11 发布信息页面中, dwBuildNumber的值 22000 及以上将指示 Windows 11。

推荐方式:引自本页: https ://learn.microsoft.com/en-us/windows/win32/sysinfo/operating-system-version

识别当前操作系统通常不是确定特定操作系统功能是否存在的最佳方法。 这是因为操作系统可能在可再分发的 DLL 中添加了新功能。 与其使用 Version API Helper 函数来确定操作系统平台或版本号,不如测试功能本身是否存在。

要确定测试某项功能的最佳方法,请参阅相关功能的文档。 以下列表讨论了一些常见的特征检测技术:

您可以测试与特性关联的函数是否存在。 要测试系统 DLL 中是否存在函数,请调用 LoadLibrary 函数来加载 DLL。 然后调用 GetProcAddress 函数来确定感兴趣的函数是否存在于 DLL 中。 使用 GetProcAddress 返回的指针来调用该函数。 请注意,即使该函数存在,它也可能是一个仅返回错误代码(如 ERROR_CALL_NOT_IMPLEMENTED)的存根。 您可以使用 GetSystemMetrics 函数确定某些功能是否存在。 例如,您可以通过调用 GetSystemMetrics(SM_CMONITORS) 来检测多个显示器。 有多个版本的可再发行 DLL 可实现 shell 和通用控制功能。 有关确定运行应用程序的系统上存在哪些版本的信息,请参阅主题 Shell 和公共控件版本。 如果您必须要求特定的操作系统,请确保将其用作最低支持版本,而不是为一个操作系统设计测试。 这样,您的检测代码将继续在未来版本的 Windows 上运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM