執筆者: 株式会社クリエ・イルミネート 溝端 二三雄

特定バージョンの OS (または、特定バージョン以降の OS) で実行されることを前提としているようなプログラムを開発する場合、そのプログラムが実行されている OS のバージョンを取得する必要があります。Visual Basic 6.0 のライブラリにはこのような機能を実現するクラスや関数はありませんが、Windows の API (ここで紹介するコードは Windows 2000 以降に標準搭載されています) を呼び出すことで容易に実現可能です。

今回紹介するコード

Visual Basic
Option Explicit 
Private Type OSVERSIONINFOEX 
    dwOSVersionInfoSize As Long 
    dwMajorVersion      As Long 
    dwMinorVersion      As Long 
    dwBuildNumber       As Long 
    dwPlatformId        As Long 
    szCSDVersion        As String * 128 
End Type 
Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFOEX) As Long 
Private Sub OSVersionButton_Click() 
    Dim lpVerInfo As OSVERSIONINFOEX 
    lpVerInfo.dwOSVersionInfoSize = Len(lpVerInfo) 
    Dim Result As Long 
    Result = GetVersionEx(lpVerInfo) 
    If Result = 0 Then Exit Sub 
     
    OSVersionLabel.Caption = _ 
    CStr(lpVerInfo.dwMajorVersion) + "." + CStr(lpVerInfo.dwMinorVersion) + " " + CStr(lpVerInfo.dwBuildNumber) 
End Sub 
 
 
 

Windows API を呼び出すための準備

Visual Basic
Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFOEX) As Long 
 
 
この 1 行 (Declare 構文) で Windows API を使用するための宣言を行っています。
具体的には kernel32.dll 内にある GetVersionExA 関数を使用 (オプションである Alias を指定しているので、VB 6.0 では GetVersionEx と言う関数名で使用) するための宣言となります。また、この関数の引数として OSVERSIONINFOEX と名付けたデータ型を使用します。このデータ型はこの宣言構文の前で定義されています。

GetVersionEx 関数の呼び出し

Visual Basic
Dim lpVerInfo As OSVERSIONINFOEX 
lpVerInfo.dwOSVersionInfoSize = Len(lpVerInfo) 
Dim Result As Long 
Result = GetVersionEx(lpVerInfo) 
 
 
先に定義した宣言通り、API を呼び出すだけです。ただし、パラメータとして定義した OSVERSIONINFOEX 型の dwOSVersionInfoSize だけは事前に指定しておく必要があります。

Visual Basic
    If Result = 0 Then Exit Sub 
     
    OSVersionLabel.Caption = _ 
    CStr(lpVerInfo.dwMajorVersion) + "." + CStr(lpVerInfo.dwMinorVersion) + " " + CStr(lpVerInfo.dwBuildNumber) 
 
 
GetVersionEx 関数の呼び出しに失敗すると、戻り値として 0 が返ってきます (dwOSVersionInfoSize を設定せずに呼び出した場合など)。正しく処理された場合、メジャー バージョン、マイナー バージョン、ビルド番号を表示します。
Windows 7 上で実行すると以下のように表示されます。
 
メジャー バージョンとマイナー バージョンの組み合わせは次のようになります。
例えば Windows 7 と Windows Server 2008 R2 は同じバージョンとして扱われることになります。OSVERSIONINFOEX の他の値を参照する事で区別する事は可能です。詳しくは OSVERSIONINFOEX  Structure  をご参照ください。
図 1


関連リンク

 

Code Recipe Windows デベロッパー センター

ページのトップへ