如何在桌面应用程序中检测Windows 8.1

Ton*_*mbe 13 windows winapi

在Windows 8.1预览版Environment.OSVersion.Version中返回与Windows 8相同的版本号.是否有检测Windows 8.1的替代方法.

use*_*541 24

看看这篇文章:

Windows 8.1 Preview中的操作系统版本更改

GetVersion(Ex)API已被弃用.这意味着虽然您仍然可以调用API,但如果您的应用程序没有专门针对Windows 8.1预览版,您将获得Windows 8版本控制(6.2.0.0).

它说的是GetVersion关于真实操作系统版本的问题,除非你在清单中明确指出8.1.

您需要将以下内容添加到应用清单:

 <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1"> 
    <application> 
      * <!-- Windows 8.1 -->
      * <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
        <!-- Windows Vista -->
        <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/> 
        <!-- Windows 7 -->
        <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
        <!-- Windows 8 -->
        <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
    </application> 
</compatibility>
Run Code Online (Sandbox Code Playgroud)

如果您不想这样做,可以检查以下注册表项:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion

当前版本将为您提供6.3

目前的建筑数量为9431


Pau*_*aul 6

另一种可能性是使用该VerifyVersionInfo函数,即使您的应用程序没有user844541提到的相应清单文件,该函数也会返回正确的结果.

例:

BOOL CompareWindowsVersion(DWORD dwMajorVersion, DWORD dwMinorVersion)
{
    OSVERSIONINFOEX ver;
    DWORDLONG dwlConditionMask = 0;

    ZeroMemory(&ver, sizeof(OSVERSIONINFOEX));
    ver.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
    ver.dwMajorVersion = dwMajorVersion;
    ver.dwMinorVersion = dwMinorVersion;

    VER_SET_CONDITION(dwlConditionMask, VER_MAJORVERSION, VER_EQUAL);
    VER_SET_CONDITION(dwlConditionMask, VER_MINORVERSION, VER_EQUAL);

    return VerifyVersionInfo(&ver, VER_MAJORVERSION | VER_MINORVERSION, dwlConditionMask);
}
Run Code Online (Sandbox Code Playgroud)

用法:

if(CompareWindowsVersion(6, 3))
{
    // Windows 8.1
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,任何发现此方法的人都不适用于Windows 10 (3认同)

小智 6

使用ntdll!RtlGetVersion.这是兼顾GetVersionEx和VerifyVersionInfo使用的,它提供了正确的版本号.它需要一个指向OSVersionInfoExW结构的指针,就像GetVersionExW这样.如果成功,则返回STATUS_SUCCESS(0).