第81章 バージョン情報


趣味でプログラムを書いている分には、自分の OSのバージョンを知る必要性はあまりないかもしれません。 しかし、OSの種類やらバージョンを知ることができると いろいろ便利なこともあります。

BOOL GetVersionEx( LPOSVERSIONINFO lpVersionInformation // バージョン情報構造体へのポインタ );

成功すれば0以外を返します。 バージョン情報構造体は次のように定義されています。

typedef struct _OSVERSIONINFO{ DWORD dwOSVersionInfoSize; DWORD dwMajorVersion; DWORD dwMinorVersion; DWORD dwBuildNumber; DWORD dwPlatformId; TCHAR szCSDVersion[ 128 ]; } OSVERSIONINFO;

dwOSVersionInfoSizeには、バージョン情報構造体のサイズを指定します。

dwMajorVersionには、メジャーバージョン番号が返されます。 Windows NT 4.0なら4という具合です。

dwMinorVersionには、マイナーバージョンが返されます。 Windows NT 3.51なら51といった具合です。

dwBuildNumberには、NTならばビルド番号がはいります。
Windows 95 の場合はLOWORDにビルド番号、HIWORDにメジャーとマイナー バージョン番号が入ります。

dwPlatformIdには、プラットフォームの種類がはいります。
Win32sならばVER_PLATFORM_WIN32s
Windows 95ならばVER_PLATFORM_WIN32_WINDOWS
Windows NTならばVER_PLATFORM_WIN32_NTがはいります。
ちなみにwinbase.hで

#define VER_PLATFORM_WIN32s 0 #define VER_PLATFORM_WIN32_WINDOWS 1 #define VER_PLATFORM_WIN32_NT 2

のように定義されています。 では、サンプルを見てみましょう。

// version.cpp #include <windows.h> int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPTSTR lpCmdLine, int nCmdShow) { OSVERSIONINFO osv; osv.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); char str[256]; char *str_format = "Build No.= %d"; GetVersionEx(&osv); switch (osv.dwPlatformId) { case VER_PLATFORM_WIN32s: MessageBox(NULL, "Win32sです", "Platform", MB_OK); break; case VER_PLATFORM_WIN32_WINDOWS: MessageBox(NULL, "Windows95です", "Platform", MB_OK); wsprintf(str, str_format, LOWORD(osv.dwBuildNumber)); MessageBox(NULL, str, "OK", MB_OK); break; case VER_PLATFORM_WIN32_NT: MessageBox(NULL, "WindowsNTです", "Platform", MB_OK); break; } return 0; }

サンプルは、たったこれだけです。OSのプラットフォームを 調べて、Windows95ならビルド番号を示すというものです。

では、このようなバージョン情報は実際にはどのように 使われるのでしょうか。例を示します。

このHPではウィンドウクラスを登録するのは、 WNDCLASS構造体を定義して、RegisterClass関数で 登録していました。しかし動作しているOSがWindows95であるとわかった場合、 WNDCLASSEX構造体と、RegisterClassEx関数を使うことができます。

typedef struct _WNDCLASSEX { // wc UINT cbSize; UINT style; WNDPROC lpfnWndProc; int cbClsExtra; int cbWndExtra; HANDLE hInstance; HICON hIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCTSTR lpszMenuName; LPCTSTR lpszClassName; HICON hIconSm; } WNDCLASSEX;

WNDCLASSとどこが違うかというと、cbSize, hIconSmが追加されています。 hIconSmには、16*16の小さいアイコンを登録します。 もともとWindwos95専用だったのですが、Windwos NTでも3.5から採用されたみたいです。 このWNDCLASSEXを登録するのがRegisterClassExです。

[SDK Index] [総合Index] [Previous Chapter] [Next Chapter]

Update Oct/11/1997 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。