首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在桌面应用程序中检测Windows 8.1

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

Stack Overflow用户
提问于 2013-07-01 15:24:40
回答 4查看 12K关注 0票数 13

在Windows8.1预览版中,Environment.OSVersion.Version返回的版本号与Windows8相同。是否有其他方法可以检测Windows8.1。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-07-01 22:32:04

看看这篇文章:

Operating system version changes in Windows 8.1 Preview

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

它说的是,除非你在你的清单中明确指出8.1,否则GetVersion会在真实的操作系统版本上对你撒谎。

您需要在应用程序清单中添加以下内容:

代码语言:javascript
复制
 <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>

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

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\当前版本

当前版本将提供6.3版本

当前内部版本编号将为9431

票数 24
EN

Stack Overflow用户

发布于 2013-10-01 22:58:54

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

示例:

代码语言:javascript
复制
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);
}

用法:

代码语言:javascript
复制
if(CompareWindowsVersion(6, 3))
{
    // Windows 8.1
}
票数 6
EN

Stack Overflow用户

发布于 2013-11-16 23:31:01

使用ntdll!RtlGetVersion。这是GetVersionExVerifyVersionInfo都使用的,它给出了正确的版本号。它接受指向OSVersionInfoExW结构的指针,就像GetVersionExW一样。如果成功,则返回STATUS_SUCCESS (0)。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17399302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档