Identifier les éditions de Windows
-
26-09-2019 - |
Question
Je suis en train d'écrire une fonction qui imprime des informations détaillées version de Windows, la sortie peut être un tuple comme ceci:
('32bit', 'XP', 'Professional', 'SP3', 'English')
Il soutiendra Windows XP et plus. Et je suis coincé à obtenir l'édition de Windows, par exemple, "Professional", "Home Basic", etc.
platform.win32_ver () ou sys.getwindowsversion () ne le fait pas pour moi.
win32api.GetVersionEx (1) presque coups, mais il ressemble à n » t me dire assez d'informations.
Alors j'ai vu GetProductInfo () , mais semble que ce soit pas mis en œuvre pywin32.
Les conseils?
La solution
Vous pouvez utiliser ctypes
pour accéder à une fonction WinAPI. GetProductInfo()
est windll.kernel32.GetProductInfo
.
Je trouve un Python version (sous licence GPL, mais vous pouvez voir l'utilisation des fonctions là-bas) du MSDN "Obtenir la version du système" exemple .
Autres conseils
Si ctypes ne fonctionne pas (en raison de 32 vs 64 bits?), Ce hack devrait:
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())
Ou tout simplement lire le Registre:
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])
Ou utilisez ceci:
from win32com.client import GetObject
wim = GetObject('winmgmts:')
print([o.Caption for o in wim.ExecQuery("Select * from Win32_OperatingSystem")][0])