OSのバージョン情報を取得には、GetVersionEx関数を使用します。
この関数は、引数にOSVERSIONINFO構造体を持ち、OSのバージョン情報などは、 この中に格納されます。この関数が失敗すると0が返り、成功すると0以外の 整数が返ります。
(GlobalMemoryStatus 関数の使用方法)
このサンプルでは、CommandButtonをクリックすることでメッセージボックスに バージョン情報が表示されます。
フォームのGeneralセクションに次の宣言コードを追加して下さい。
次に、フォームにCommandButtonを配置し、次のコードを追加します。
'構造体の定義 Private Type OSVERSIONINFO dwOSVersionInfoSize As Long 'この構造体のサイズ dwMajorVersion As Long 'メジャーバージョン dwMinorVersion As Long 'マイナーバージョン dwBuildNumber As Long 'ビルド番号 dwPlatformId As Long 'OS名の定義番号 szCSDVersion As String * 128'OSに関する説明 End Type 'APIの宣言 Private Declare Function GetVersionEx Lib "kernel32" Alias _ "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) _ As Long 'OS名の定義 Private Const VER_PLATFORM_WIN32s = 0& '未定義 Private Const VER_PLATFORM_WIN32_WINDOWS = 1&'WINDOWS95 Private Const VER_PLATFORM_WIN32_NT = 2& 'WINDOWSNT
このようにバージョン情報は簡単に得られるのですが、関数を呼び出す前に 引数の構造体のサイズを格納することを忘れないようにして下さい。これを せずに呼び出すと、関数は失敗してしまいます。
Private Sub Command1_Click() Dim OsVerInfo As OSVERSIONINFO Dim msg As String Dim OSName As String Dim MaVer As Long Dim MiVer As Long Dim BNum As Long '関数を呼び出す前に引数の構造体のサイズを格納しなくてはいけない OsVerInfo.dwOSVersionInfoSize = Len(OsVerInfo) If GetVersionEx(OsVerInfo) = 0& Then Exit Sub MaVer = OsVerInfo.dwMajorVersion MiVer = OsVerInfo.dwMinorVersion Select Case OsVerInfo.dwPlatformId Case 0& OSName = "未定義" Case 1& 'Windows 95 - 上位2バイトがメジャーバージョン(上位1バイト) 'とマイナーバージョン (下位1バイト) '下位2バイトにビルド番号(1000 > の時 Windows 95 OSR 2 以降) BNum = OsVerInfo.dwBuildNumber Mod (2& ^ 16&) OSName = "WINDOWS95" Case 2& 'Windows NT - ビルド番号 BNum = OsVerInfo.dwBuildNumber OSName = "WINDOWSNT" End Select msg = "OS名 : " & OSName & Chr(10) & _ "メジャーバージョン : " & MaVer & Chr(10) & _ "マイナーバージョン : " & MiVer & Chr(10) & _ "ビルドナンバー : " & BNum MsgBox msg, vbInformation + vbOKOnly, "OSバージョン情報" End Sub
(ビルド番号のデータの格納のされ方)
全体は、4バイトのLong型変数で、
Windows 95 の場合、下位2バイトがビルド番号になっています。
下位2バイトは、
4バイトの値を2の16乗で割った余り、もしくは2の16乗との論理積(AND) の計算から得られます。
このようにビット演算を使っていて複雑な ので注意して下さい。