2

詳細な Windows バージョン情報を出力する関数を作成しています。出力は次のようなタプルになる場合があります。

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

Windows XP 以降をサポートする予定です。そして、「Professional」、「Home Basic」などの Windows エディションを入手することに行き詰まっています。

platform.win32_ver() または sys.getwindowsversion() は私のためにそれをしません。

win32api.GetVersionEx(1)はほぼヒットしますが、十分な情報が得られないようです。

次に、GetProductInfo()を見ましたが、pywin32 には実装されていないようです。

ヒントはありますか?

4

3 に答える 3

3

を使用ctypesして、任意の WinAPI 関数にアクセスできます。GetProductInfo()ですwindll.kernel32.GetProductInfo

MSDNの「Getting the System Version」の例のPythonバージョン(GPLライセンスですが、そこで関数の使用法を見ることができます)を見つけました。

于 2010-05-12T08:06:27.433 に答える
2

上記の解決策をいくつか試しましたが、「Windows XP」または「Windows 7」を提供するものを探していました。platformには、さらに多くの情報を公開するメソッドがいくつかあります。

import platform
print platform.system(),platform.release()
于 2012-07-20T10:45:00.650 に答える
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])
于 2011-10-27T10:10:56.513 に答える