Visual C++でプログラムを作っていて、たまにOS判定特に9x系(Windows 95,98,Me)かNT系(Windows 2000,XP,Vista)かを知りたいことがある。そんなときのためのTips。
GetVersionEx
現在のOSのバージョンを調べるAPI。MSDNによれば、Windows 95 以降Windows NT 3.5 以降で使えるとのこと。
使い方は簡単。下のような感じ。
1 2 3 |
OSVERSIONINFOA OsVersionInfo; OsVersionInfo.dwOSVersionInfoSize = sizeof( OsVersionInfo ); GetVersionExA( &OsVersionInfo ); |
ただし、このように末尾にAがつくもの(マルチバイト文字列用)でないと9x系でサポートされていないのでこちらを使う。
さて、関数を実行したら上記でいうOsVersionInfoに値がセットされるのでそれを見る。今回のばあい、9x系かNT系かの判定ということで、dwPlatformIdというプラットフォームを示す部分だけを見ればよい。この値は、9x系の場合VER_PLATFORM_WIN32_WINDOWSとなり、NT系の場合VER_PLATFORM_WIN32_NTになるようだ。(いまだにNT系というのも何か変な気がするが、、、)
ちなみに、今使ってるWindows XPだとこのような値になった。
1 2 3 4 5 6 |
dwOSVersionInfoSize 148 unsigned long dwMajorVersion 5 unsigned long dwMinorVersion 1 unsigned long dwBuildNumber 2600 unsigned long dwPlatformId 2 unsigned long szCSDVersion 0x0012fed4 "Service Pack 2" char [128] |