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の種類は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の値からも得ることができます。
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であると分かります。
------更新履歴