在 Python 中获取当前的 Windows 11 版本

Posted

技术标签:

【中文标题】在 Python 中获取当前的 Windows 11 版本【英文标题】:Get current Windows 11 release in Python 【发布时间】:2021-10-24 05:45:21 【问题描述】:

在 Python 3.8.10 中,我无法获得正确的 Windows 版本,我正在运行 Windows 11 Insider Preview,但输出显示为 Windows 10

任何解决方法?

编辑:目前我发现检测 W11 的唯一方法是使用

wmic os get name

【问题讨论】:

get buildnumber 如果 Build >= 22000 您使用 Windows 11(预览版) 这里有一个错误:bugs.python.org/issue45382 【参考方案1】:

我最终遵循的解决方案:

def IsWin11():
    if sys.getwindowsversion().build > 20000:return True
    else:return False

【讨论】:

【参考方案2】:

platform.release() 调用跟踪到 win32_ver(),然后调用 C 函数 sys_getwindowsversion_impl()

该 C 调用只是通过使用 GetFileVersionInfoW() + VerQueryValueW() Win32 API 函数提取版本 of kernel32.dll file,即不是 Windows 本身的版本。

因此,在 kernel32.dll 文件的版本更改之前,它将保持 Windows 10。手动检查结果是否在该系统上匹配,如果不匹配,请为 CPython 打开一个错误。

关于这是否是正确的实现,我想说的是有争议的。显然是it was in the past,但现在不是,所以我想只需将ctypes 用于GetProductInfo() 或从注册表中提取它。

但是,您使用的是预览版,这是该版本可能“不正确”的原因之一,因为也许 Windows 开发人员打算它仍然是 10而不是 11 并且在系统的某个地方有一个标志说它是“10”+“预览”。

【讨论】:

我测试了 C 函数但给出了相同的值,问题出在 kernel32 版本上,我发现检测 Win11 的唯一方法是:wmic os get name

以上是关于在 Python 中获取当前的 Windows 11 版本的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 上获取当前正在播放的媒体缩略图的方法仅适用于每个 Python 实例

如何在 Python 中获取当前的 CPU 和 RAM 使用情况?

如何在 Windows Phone 8.1 中获取当前位置的当前货币代码

在 windows 中获取当前线程的 NUMA 节点

python怎么判断windows下的某一个窗口是不是当前正在操作的

是否有一种可移植的方式来获取 Python 中的当前用户名?