WMI (Windows Management Instrumentation) を使ってOSのバージョンを取得する。
SWbemServicesからOSの情報取得やシャットダウンが実行できるWin32_OperationSytemクラスを呼び出し必要な情報を取得する。
OSのバージョン番号(メジャー番号と1番目のマイナー番号)でどのWindowsOSかを判断する。
Class OSInfo
Private m_wmi
Private m_osset
Private m_os
Private Sub Class_Initialize
dim wmi
dim osset
dim elem
'SWbemServicesインスタンスを取得
Set wmi = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")
'SWbemObjectSetインスタンスを取得 (中にはWin32_OperationSytemインスタンスが1つ含まれている)
Set osset = wmi.ExecQuery("SELECT *FROM Win32_OperatingSystem")
for each elem in osset
'SWbemObjectSetからWin32_OperationSytemインスタンスを取得
'for each 以外でどのように集合内の要素にアクセスするか不明なため
set m_os = elem
exit Sub
next
End Sub
Function getVersion()
'OSTypeが16, 17の場合はOSTypeのみでOSが判明する。
select case m_os.OSType
case 16
getVersion = "Win95"
exit function
case 17
getVersion = "Win98"
exit function
end select
'OSTypeが18の場合Versionプロパティの
'第1マイナーバージョンまででOSが判明する。
select case Left(m_os.version, 3)
case "4.0"
getVersion = "WinNT"
case "5.0"
getVersion = "Win2000"
case "5.1"
getVersion = "WinXP"
case "5.2"
getVersion = "Win2003Server"
case "6.0"
'Version 6以降はPC向けOSとサーバ向けOSのバージョン情報が
'同じになるため、Captionで判断
if right(m_os.Caption, 5) = "Vista" then
getVersion = "WinVista"
else
getVersion = "Win2008Server"
end if
case "6.1"
if mid(m_os.Caption, inStr(m_os.Caption, "Windows") + 8, 1) = "7" then
getVersion = "Win7"
else
getVersion = "Win2008ServerR2"
end if
case else
getVersion = "????"
end select
End Function
Function getVerNo()
getVerNo = left(m_os.Version, 3)
End Function
Function getDesc()
getDesc = m_os.Caption & " " & m_os.CSDVersion
End Function
Function getHostName()
getHostName = m_os.CSName
End Function
End Class
SWbemServicesからOSの情報取得やシャットダウンが実行できるWin32_OperationSytemクラスを呼び出し必要な情報を取得する。
OSのバージョン番号(メジャー番号と1番目のマイナー番号)でどのWindowsOSかを判断する。
Class OSInfo
Private m_wmi
Private m_osset
Private m_os
Private Sub Class_Initialize
dim wmi
dim osset
dim elem
'SWbemServicesインスタンスを取得
Set wmi = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\.\root\cimv2")
'SWbemObjectSetインスタンスを取得 (中にはWin32_OperationSytemインスタンスが1つ含まれている)
Set osset = wmi.ExecQuery("SELECT *FROM Win32_OperatingSystem")
for each elem in osset
'SWbemObjectSetからWin32_OperationSytemインスタンスを取得
'for each 以外でどのように集合内の要素にアクセスするか不明なため
set m_os = elem
exit Sub
next
End Sub
Function getVersion()
'OSTypeが16, 17の場合はOSTypeのみでOSが判明する。
select case m_os.OSType
case 16
getVersion = "Win95"
exit function
case 17
getVersion = "Win98"
exit function
end select
'OSTypeが18の場合Versionプロパティの
'第1マイナーバージョンまででOSが判明する。
select case Left(m_os.version, 3)
case "4.0"
getVersion = "WinNT"
case "5.0"
getVersion = "Win2000"
case "5.1"
getVersion = "WinXP"
case "5.2"
getVersion = "Win2003Server"
case "6.0"
'Version 6以降はPC向けOSとサーバ向けOSのバージョン情報が
'同じになるため、Captionで判断
if right(m_os.Caption, 5) = "Vista" then
getVersion = "WinVista"
else
getVersion = "Win2008Server"
end if
case "6.1"
if mid(m_os.Caption, inStr(m_os.Caption, "Windows") + 8, 1) = "7" then
getVersion = "Win7"
else
getVersion = "Win2008ServerR2"
end if
case else
getVersion = "????"
end select
End Function
Function getVerNo()
getVerNo = left(m_os.Version, 3)
End Function
Function getDesc()
getDesc = m_os.Caption & " " & m_os.CSDVersion
End Function
Function getHostName()
getHostName = m_os.CSName
End Function
End Class