tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルWindowsのバージョンの判別方法
記事No13760
投稿日: 2009/06/25(Thu) 14:28
投稿者ヨシ
お世話になります。
VBの開発をおこなって、3年ほどになるものです。

OS(=Windows)のバージョン情報の取得の方法について質問があります。
こちらの別ページに、kernel32を使用した方法が載っておりますが、
この方法だと、VistaとWindows Server 2008で同じ値を取得してしまいます。

VistaとWindows Server 2008を判別する方法はありますでしょうか。
よろしくお願いいたします。

[ツリー表示へ]
タイトルRe: Windowsのバージョンの判別方法
記事No13761
投稿日: 2009/06/25(Thu) 14:49
投稿者ヨシ
補足いたします。
上記で「こちらの別ページ」としたのは、下記になります。
情報が不足し失礼いたしました。よろしくお願いいたします。

http://hanatyan.sakura.ne.jp/vbhlp/Version.htm

[ツリー表示へ]
タイトルRe: Windowsのバージョンの判別方法
記事No13762
投稿日: 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

[ツリー表示へ]
タイトルRe: Windowsのバージョンの判別方法
記事No13763
投稿日: 2009/06/25(Thu) 15:24
投稿者YuO
> OS(=Windows)のバージョン情報の取得の方法について質問があります。
> こちらの別ページに、kernel32を使用した方法が載っておりますが、
> この方法だと、VistaとWindows Server 2008で同じ値を取得してしまいます。
> VistaとWindows Server 2008を判別する方法はありますでしょうか。

APIの話ですから,まずはMSDNを調べましょう。
MSDN: OSVERSIONINFOEX Structure (Windows)
http://msdn.microsoft.com/en-us/library/ms724833.aspx

上記のRemarksに,比較方法があります。
Windows Vista : Major = 6 / Minor = 0 / OSVERSIONINFOEX.wProductType = VER_NT_WORKSTATION
Windows Server 2008 : Major = 6 / Minor = 0 / OSVERSIONINFOEX.wProductType <> VER_NT_WORKSTATION
Windows Server 2008 R2 : Major = 6 / Minor = 1 / OSVERSIONINFOEX.wProductType <> VER_NT_WORKSTATION
Windows 7 : Major = 6 / Minor = 1 / OSVERSIONINFOEX.wProductType = VER_NT_WORKSTATION
# Windows 7という名前付けはややこしいからやめてほしかった……。

[ツリー表示へ]
タイトルRe: Windowsのバージョンの判別方法
記事No13767
投稿日: 2009/06/25(Thu) 16:42
投稿者ヨシ
ご回答ありがとうございました。

英語のサイトは理解が深くまでいかないので避けておりました。
すみません。

解決方法を提示して頂きましたが、こんなに早く回答をいただけると
おもっていませんで、下記サイトを見つけました。
http://heropa.blog.ocn.ne.jp/hoge/2008/07/vb6vista_produs_07ab.html

VistaのEditionを取得する意図ですが、Windows server 2008 でも
期待した結果が返りました。

このたびはご対応ありがとうございました。

[ツリー表示へ]