[Win32 API] OSのバージョン取得

OSVERSIONINFO構造体とGetVersionEx関数を利用すればいいらしい。
ただし、OSVERSIONINFO構造体ではエディション情報(XP Home/Proとか)までは取得できない。エディション情報を取得する場合はOSVERSIONINFOEX構造体を用いる必要があるらしい。

OSVERSIONINFO構造体

DWORD dwOSVersionInfoSize
構造体のサイズ
DWORD dwMajorVersion
OSのメジャーバージョン番号
DWORD dwMinorVersion
OSのマイナーバージョン番号
DWORD dwBuildNumber
OSのビルド番号
DOWRD dwPlatformId
プラットフォームID
TCHAR szCSDVersion[128]
追加情報

各OS毎の組み合わせ*1

OSdwPlatformIddwMajorVersiondwMinorVersiondwBuildNumberszCSDVersion
Windows 951(9x系)40950 
Windows 95 SP1a
Windows 95 OSR2/2.11111B
Windows 95 OSR2.51212C
Windows 98101998 
Windows 98 SE2222A
Windows Me903000 
Windows NT 4.02(NT系)01381 
Windows 2000502195 
Windows XP12600 
Windows XP SP2Service Pack 2
Windows XP x642  
Windows Server 20032  
Windows Server 2003 R2  
Windows Vista60  

*1 : 判明次第順次更新します

使ってみる

OSVERSIONINFO osVer;
//構造体のサイズを求めてdwOSVersionInfoSizeに格納
osVer.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
::GetVersionEx( &osVer );

参考