识别Windows版本

2 投票
3 回答
503 浏览
提问于 2025-04-15 22:37

我正在写一个函数,用来打印详细的Windows版本信息,输出的结果可能是这样的一个元组:

('32bit', 'XP', 'Professional', 'SP3', 'English')

这个函数会支持Windows XP及以上版本。但是我在获取Windows的具体版本时遇到了困难,比如“专业版”、“家庭基础版”等等。

使用platform.win32_ver()或sys.getwindowsversion()这些方法对我来说不太管用。

win32api.GetVersionEx(1)几乎可以满足我的需求,但似乎没有提供足够的信息。

然后我看到GetProductInfo()这个方法,但在pywin32中似乎没有实现。

有没有什么建议呢?

3 个回答

2

我试过上面提到的一些解决办法,但我想要的是能告诉我“Windows XP”或者“Windows 7”的方法。其实在platform这个库里,还有一些其他的方法可以获取更多的信息。

import platform
print platform.system(),platform.release()
2

如果ctypes不管用(可能是因为32位和64位的问题?),那么这个小技巧应该能解决:

def get_Windows_name():
    import subprocess, re
    o = subprocess.Popen('systeminfo', stdout=subprocess.PIPE).communicate()[0]
    try: o = str(o, "latin-1")  # Python 3+
    except: pass  
    return re.search("OS Name:\s*(.*)", o).group(1).strip()

print(get_Windows_name())

或者直接读取注册表:

try: import winreg
except: import _winreg as winreg
with winreg.OpenKey(winreg.HKEY_LOCAL_MACHINE, r"SOFTWARE\Microsoft\Windows NT\CurrentVersion") as key:
    print(winreg.QueryValueEx(key, "EditionID")[0])

或者使用这个:

from win32com.client import GetObject
wim = GetObject('winmgmts:')
print([o.Caption for o in wim.ExecQuery("Select * from Win32_OperatingSystem")][0])
3

你可以使用 ctypes 来调用任何 Windows API 函数。比如,GetProductInfo() 这个函数就在 windll.kernel32.GetProductInfo 里。

我找到了一份 Python 版本(是 GPL 许可证的,但你可以看到里面函数的用法),它是 MSDN 上的“获取系统版本”示例

撰写回答