| | タイトル | : Re: Windowsのバージョンの判別方法 |  | 記事No | : 13762 |  | 投稿日 | : 2009/06/25(Thu) 15:20 |  | 投稿者 | : 魔界の仮面弁士 | 
 > こちらの別ページに、kernel32を使用した方法が載っておりますが、> http://hanatyan.sakura.ne.jp/vbhlp/Version.htm
 
 ネタ的な方法としては、こんな手もあったりします。
 
 Option Explicit
 Private Declare Sub GetMem4 Lib "msvbvm60.dll" (ByVal ptr As Long, ByRef ret As Long)
 
 Private Sub Command1_Click()
 Dim major As Long, minor As Long
 Dim suite As Long, product As Long
 GetMem4 &H7FFE026C, major
 GetMem4 &H7FFE0270, minor
 GetMem4 &H7FFE0264, product
 GetMem4 &H7FFE02D0, suite
 
 Debug.Print "Ver="; CStr(major); "."; CStr(minor)
 Debug.Print "Product="; product
 Debug.Print "Suite=&H" & Hex(suite)
 End Sub
 
 
 > この方法だと、VistaとWindows Server 2008で同じ値を取得してしまいます。
 OSVERSIONINFOEX.wProductType が返す値が、
 Vista では VER_NT_WORKSTATION だったかと。
 
 
 > VistaとWindows Server 2008を判別する方法はありますでしょうか。
 Win32_OperatingSystem クラスのプロパティにも、何か判定材料になりそうな物があるかも。
 # 手元に 2008 環境が無いので確認できず…。
 
 Private Sub Command1_Click()
 Dim os As Object
 Dim p As Object
 For Each os In GetObject("winmgmts:").InstancesOf("Win32_OperatingSystem")
 For Each p In os.Properties_
 Debug.Print p.Name; Tab(45); p.Value
 Next
 Next
 End Sub
 
 |