c++ 如何获取Windows 11的osversioninfo

g6baxovj  于 2022-12-24  发布在  Windows
关注(0)|答案(2)|浏览(433)

**GetVersionEx Api**可以在C++中获得Windows 10以上的版本。

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

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

    GetVersionEx(&osvi);
}

Version Helper functions有一个IsWindows10OrGreaterAPI,可以检查它的Windows10或更高版本,但我需要确切的Windows11的版本信息。是否有任何API一样,GetVersionEx从那里我可以得到Windows11的整个版本信息。

xt0899hw

xt0899hw1#

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

成员
为什么不使用dwBuildNumber来识别Windows 11版本,Windows 11的内部版本号从22000开始,你可以在网上搜索你正在寻找的确切内部版本号。

8fq7wneg

8fq7wneg2#

直接(但不推荐):GetVersionGetVersionEx都已弃用。也就是说,如果您确实想检测Windows 11,可以使用GetVersionEx返回的OSVERSIONINFOEXdwBuildNumber成员。在Windows 11 release information page中,dwBuildNumber的值为22000及以上将指示Windows 11。
**推荐方式:**本页引用:https://learn.microsoft.com/en-us/windows/win32/sysinfo/operating-system-version

标识当前操作系统通常不是确定特定操作系统功能是否存在的最佳方法。这是因为操作系统可能已在可再发行的DLL中添加了新功能。请测试功能本身是否存在,而不是使用版本API帮助程序函数来确定操作系统平台或版本号。
要确定测试功能的最佳方法,请参阅感兴趣功能的文档。下表讨论了一些常用的功能检测技术:
您可以测试是否存在与某个功能关联的函数。若要测试系统DLL中是否存在某个函数,请调用LoadLibrary函数以加载该DLL。然后调用GetProcAddress函数以确定DLL中是否存在感兴趣的函数。使用GetProcAddress返回的指针来调用该函数。请注意,即使存在该函数,它可能是只返回错误代码(如ERROR_CALL_NOT_IMPLEMENTED)的存根。您可以使用GetSystemMetrics函数确定某些功能是否存在。例如,可以通过调用GetSystemMetrics检测多个显示监视器(SM_CMONITORS)。实现 shell 和公共控件功能的可再发行DLL有几个版本。有关确定运行应用程序的系统上存在哪些版本的信息,请参阅主题Shell和公共控件版本。如果必须要求特定的操作系统,请确保将其用作支持的最低版本。而不是为一个操作系统设计测试。这样,您的检测代码将继续在Windows的未来版本上工作。

相关问题