OSのバージョンを調べる

 Windowsに限らず、OperationSystemのバージョンを調べてみましょう。

 どんなOSが調べられるのか?

 インタプリタシェルを立ち上げて次のように入力してください。

>>> import System
>>> dir(System.PlatformID)


出力画面:
['CompareTo', 'Equals', 'Format', 'GetHashCode', 'GetName', 'GetNames', 'GetType', 'GetTypeCode', 'GetUnderlyingType', 'GetValues', 'HasFlag', 'IsDefined', 'MacOSX', 'MemberwiseClone', 'Parse', 'ReferenceEquals', 'ToBoolean', 'ToByte', 'ToChar', 'ToDateTime', 'ToDecimal', 'ToDouble', 'ToInt16', 'ToInt32', 'ToInt64', 'ToObject', 'ToSByte', 'ToSingle', 'ToString', 'ToType', 'ToUInt16', 'ToUInt32', 'ToUInt64', 'TryParse', 'Unix', 'Win32NT', 'Win32S', 'Win32Windows', 'WinCE', 'Xbox', '__and__', '__class__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__invert__', '__le__', '__lt__', '__ne__', '__new__', '__nonzero__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__xor__', 'value__']
この中に.NET Frameworkで調べられるOSの情報が入っています。OSっぽい名前は
"MacOSX"、"Unix"、"Win32NT"、"Win32S"、"Win32Windows"、"WinCE"、"Xbox"なんかがありますね。"Xbox"があるところが、さすがMicrosoftといった感じでしょうか。

 MacOSX、Unixは今Windows以外のOSといったら、このどちらかでしょう。
 Win32NTはWindowsNT、Windows2000、WindowsXP、WindowsVista、Windows7という今の主流のWindowsですね。
 Win32Sはやっと32ビットで動くグラフィカルなインターフェースがでてきた頃、16ビットOSであるWindows3.1上で、32ピットのソフトを動かすための拡張モジュールみたいなものでしょうか。今は64ビットOSと言われていますので、これを知っている人はパソコン暦15年以上になっているでしょうか。
 Win32Windowsは、Windows3.1からWindowsNTに移行する期間に16ビットと32ビットの両方のソフトが扱えるOSとしてあったものです。Windows95、Windows97、WindowsMeなんかがそれに当たります。
 WinCEは、今のスマートフォンの先駆けとなった端末機用に開発されたOS。Xboxは言わずもがなMicrosoftのゲーム機です。

 さて話がかなり脱線して、Windowsの備忘録みたいになってしまいましたが、これらを調べられるスクリプトを作ってみたいと思います。
OSのバージョン情報はSystem名前空間のEnvironmentクラスのOSVersionを使います。

import System
from System.Environment import OSVersion
print OSVersion

raw_input()

出力画面:
 Microsoft Windows NT 5.1.2600 Service Pack 3
実は私のOSはまだWindowsXPですが、上の表記だとなんだか分かりませんね。
上記は、Product Progression と呼ばれ細かくみると次の意味が書かれています。

PlatfromID =Windows NT
Major Revision = 5
Minor Revision = 1
Build Number = 2600
Service Pack = 3

この数字から、慣用名の"Windows XP"を出力するようにしてみましょう。

まずProduct Progression と慣用名の関係は次の通りです。
Product Progression 慣用名
PlatfromID: Windows
Windows 4.0 Windows 95
Windows 4.10 Windows 98
Windows 4.90 Windows Me
PlatfromID: Windows NT
Windows NT 3.1 Windows NT 3.1
Windows NT 3.5 Windows NT 3.5
Windows NT 3.51 Windows NT 3.51
Windows NT 4.0 Windows NT 4.0
Windows NT 5.0 Windows 2000
Windows NT 5.1 Windows XP
Windows NT 5.2 Windows Server 2003
Windows NT 6.0 Windows Vista
Windows NT 6.1 Windows 7

Major Revision、Minor Revsionの情報は、それぞれVersion.Major、Version.Minorより取得できます。これらの情報よりOSの慣用名を表示するスクリプトを書いてみます。

import System
os = System.Environment.OSVersion

if os.Platform == System.PlatformID.Win32Windows:
  if os.Version.Major == 4 :
    if os.Version.Minor == 0 :
      print "OSは Windows 95 です。"
    elif os.Version.Minor == 10 :
      print "OSは Windows 98 です。"
    elif os.Version.Minor == 90 :
      print "OSは Windows Me です。"

elif os.Platform == System.PlatformID.Win32NT:
  if os.Version.Major == 3 :
    if os.Version.Minor == 1 :
      print "OSは Windows NT 3.1 です。"
    elif os.Version.Minor == 5 :
      print "OSは Windows NT 3.5 です。"
    elif os.Version.Minor == 51 :
      print "OSは Windows NT 3.51 です。"

  elif os.Version.Major == 4 :
    if os.Version.Minor == 0 :
      print "OSは Windows NT 4.0 です。"

  elif os.Version.Major == 5 :
    if os.Version.Minor == 0 :
      print "OSは Windows 2000 です。"
    elif os.Version.Minor == 1 :
      print "OSは Windows XP です。"
    elif os.Version.Minor == 2 :
      print "OSは Windows Server 2003 です。"

  elif os.Version.Major == 6 :
    if os.Version.Minor == 0 :
      print "OSは Windows Vista です。"
    elif os.Version.Minor == 1 :
      print "OSは Windows 7 です。"

elif os.Platform == System.PlatformID.Win32S:
  print "OSは Win32s です。"

elif os.Platform == System.PlatformID.WinCE:
  print "OSは Windows CE です。"

elif os.Platform == System.PlatformID.Unix:
  print "OSは Unix です。"

elif os.Platform == System.PlatformID.MacOSX:
  print "OSは Macintosh です。"

elif os.Platform == System.PlatformID.Xbox:
  print "OSは Xbox 360 です。"

else :
  print "OSは 不明です。"

raw_input()

出力画面:
 OSは Windows XP です。