[戻る][Top]

Windows Programming TIPS

Windowsバージョン情報の取得

Windowsのバージョンやビルド番号、OSの種類(NTかどうかなど)を見分けるには GetVersionExを使用します。

GetVersionExを呼び出すと、OSVERSIONINFOに各種バージョン情報が得られます。
OSVERSIONINFOは次の通り、

struct OSVERSIONINFO {
 DWORD dwOSVersionInfoSize;
 DWORD dwMajorVersion;
 DWORD dwMinorVersion;
 DWORD dwBuildNumber;
 DWORD dwPlatformId;
 TCHAR szCSDVersion[ 128 ];
};

WindowsNT 4.0 SP6以降、Windows2000以降のOSではOSVERSIONINFOEX構造体も使用できます(それ以外のOSおよびWindows95,98ではこの構造体を指定してのGetVersionEx呼び出しはエラーとなる)。

struct OSVERSIONINFOEX {
 DWORD dwOSVersionInfoSize;
 DWORD dwMajorVersion;
 DWORD dwMinorVersion;
 DWORD dwBuildNumber;
 DWORD dwPlatformId;
 TCHAR szCSDVersion[ 128 ];
 WORD wServicePackMajor;
 WORD wServicePackMinor;
 WORD wSuiteMask;
 BYTE wProductType;
 BYTE wReserved;
};

また、バージョン比較目的では、VerifyVersionInfo API も使用できます(Windows2000以降)。

OSの種類の見分け方

OSの種類はdwPlatformId メンバで判定できます。

これが VER_PLATFORM_WIN32_NTであれば、WindowsNT 3.5,3.51,4.0Windows2000などNT系のOS。VER_PLATFORM_WIN32_WINDOWSあれば、Windows95,Window98などのNTでないWin32系OSとなります。

バージョン番号、ビルド番号

それぞれの種類が分かった上で、さらにバージョンを見分けたい場合は、バージョン番号(dwMajorVersion、dwMinorVersion)、ビルド番号(dwBuildNumber)でを使用して見分けます。

NT系のOSであれば、NT4.0は4.0.1381、Windows2000は5.0.2195。
95,98系であれば、95の初期バージョンは4.0.950、95OSR2は4.0.1111、OSR2.5は4.0.1212、98は4.10.1998、98SEは4.10.2222、Meは4.10.3000などです。

簡単に表にすると以下のようになります。

 

dwMajorVersion

dwMinorVersion
Windows 95 4 0
Windows 98 4 10
Windows Me 4 90
Windows NT 3.51 3 51
Windows NT 4.0 4 0
Windows 2000 5 0
Windows XP 5 1
Windows 2003 Server 5 2
Windows 2003 Server R2 5 2
Windows XP Professional x64 Edition 5 2
Windows Vista 6 0
Windows Server 2008 6 0
Windows 7 6 1
Windows Server 2008 R2 6 1
Windows 8 6 2
Windows Server 2012 6 2
Windows 8.1 6 3
Windows 10 10 0


サービスパック情報

NT系のOSのサービスパック情報はszCSDVersionメンバに文字列で得られます。

これが空文字列であればサービスパックはあたっておらず、サービスパックがあたっていれば"Service Pack 3"などの文字列が得られます。

95,98,Meではここに"A"とか"C"と言う文字列が入っています。これはたとえばWindows95で"C"だとWindows95 OSR2を表し、Windows 98で"A"だと"Windows 98 SE"というような事がわかります。

また、OSVERSIONINFOEXを使用できる場合、wServicePackMajor,wServicePackMinorの値からも得ることができます。

OSのエディション情報

ServerかWorkstationか、さらにXPのHome,Professionalなどのような、OSのエディションを見分けるにはOSVERSIONINFOEXのwProductTypeとwSuiteMaskを使用します。

wProductTypeが、VER_NT_WORKSTATIONであればWorkstation、VER_NT_SERVERであればServerエディションです。

XPの場合、WorkstationでwSuiteMaskにVER_SUITE_PERSONALがたっていればXPのHome Edition、それ以外であれば、Professional Editionであると分かります。

------

更新履歴


このページについてのご意見、ご感想、ご質問、ご要望、間違いの指摘等は
西川真人: m-nishikawa@nifty.comまで