2000/09/27 [水]
GetVersion または GetVersionEx API を使用すると、Windows のバージョンを取得することができます。しかし、WinME ではそれぞれのアプリケーション毎に、指定された Windows のバージョンを返すことができるので、必ずしも“本当の” Windows のバージョンを取得することができません。本当の Windows のバージョンを取得するには (DOS でも似たようなシステムコールがありましたが)、GetVersionEx の引数で指定する構造体のメンバ dwBuildNumber の値を見ます。下位ワードにはビルド番号が、上位ワードには“本当の”Windows のバージョンが入っています。上位バイトがメジャー番号、下位バイトがマイナー番号です。
vertest.c
実行例: (Win98)
vertest.c
#include <stdio.h> #include <windows.h> main() { static const char * const strPlatformId[] = { "VER_PLATFORM_WIN32s","VER_PLATFORM_WIN32_WINDOWS", "VER_PLATFORM_WIN32_NT", }; DWORD dwver; OSVERSIONINFO ovi; dwver = GetVersion(); ovi.dwOSVersionInfoSize = sizeof(ovi); GetVersionEx(&ovi); //GetVersion printf("GetVersion()=%08x\n", dwver); printf("GetVersion :Version=%u.%u\n", LOBYTE(dwver), HIBYTE(dwver)); printf("GetVersion :PlatformId=%u (%s)\n", dwver>>31, (dwver>>31) ? "Win9X": "WinNT"); //GetVersionEx printf("GetVersionEx:Version=%u.%u\n", ovi.dwMajorVersion, ovi.dwMinorVersion); printf("GetVersionEx:dwBuildNumber=%08lx\n", ovi.dwBuildNumber); printf(" Version=%u.%u.%u\n", HIBYTE(HIWORD(ovi.dwBuildNumber)), LOBYTE(HIWORD(ovi.dwBuildNumber)), LOWORD(ovi.dwBuildNumber)); printf("GetVersionEx:PlatformId=%08x (%s)\n", ovi.dwPlatformId, ovi.dwPlatformId<3 ? strPlatformId[ovi.dwPlatformId]: "???"); printf("GetVersionEx:Info=%s\n", ovi.szCSDVersion); return 0; }
実行例: (Win98)
GetVersion()=c0000a04 GetVersion :Version=4.10 GetVersion :PlatformId=1 (Win9X) GetVersionEx:Version=4.10 GetVersionEx:dwBuildNumber=040a07ce Version=4.10.1998 GetVersionEx:PlatformId=00000001 (VER_PLATFORM_WIN32_WINDOWS) GetVersionEx:Info=
by seclan