Определить выпуски Windows - PullRequest
2 голосов
/ 12 мая 2010

Я пишу функцию, которая выводит подробную информацию о версии Windows, вывод может быть следующим:

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

Это будет поддерживать Windows XP и выше.И я застрял с получением версии для Windows, например, «Professional», «Home Basic» и т. Д.

platform.win32_ver () или sys.getwindowsversion () не делают этого для меня.1006 *

win32api.GetVersionEx (1) почти попадает, но, похоже, не дает мне достаточно информации.

Тогда я увидел GetProductInfo () , но похоже, что он не реализован в pywin32.

Есть какие-нибудь подсказки?

Ответы [ 3 ]

3 голосов
/ 12 мая 2010

Вы можете использовать ctypes для доступа к любой функции WinAPI. GetProductInfo() в windll.kernel32.GetProductInfo.

Я нашел версию Python (лицензию GPL, но вы можете увидеть там использование функций) из MSDN «Получение версии системы» .

2 голосов
/ 20 июля 2012

Я попробовал несколько из приведенных выше решений, но я искал что-то, что дало бы мне «Windows XP» или «Windows 7». В платформе есть еще несколько методов, которые предоставляют еще больше информации.

import platform
print platform.system(),platform.release()
2 голосов
/ 27 октября 2011

Если 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])
...