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