OSのバージョンを詳細に表示するには?

解決


どら  2004-11-02 09:42:59  No: 54962

またまた投稿です。

OSVERSIONINFO構造体を用いて、GetVersionEx関数でOSの情報を取得すると、あまり詳細な情報がえられないような・・・

Windows 2000でも、 ProなのかServerなのか、はたまたAdvanced Serverなのか?
Windows Server 2003もStanderdやらEnterpriseやらありますよね?
さらにservice Packも、どこまであたってるかとか・・・

そういう詳細を、
     Windows 3.x/95/98/NT3.x/NT4/2kPro/2kSrvr/2kAdSrv/XP Home/XP Pro/2003SvrStd/2003SrvEnt/ SPxx

くらいの精度で取得したいのですが・・・
何かいい方法をご存じな方いらっしゃいませんか?

よろしくお願いします。


YuO  2004-11-02 11:16:46  No: 54963

OSVERSIONINFOEXを使えばいいだけでは?
http://msdn.microsoft.com/library/en-us/sysinfo/base/osversioninfoex_str.asp


どら  2004-11-04 02:02:59  No: 54964

YuOさん

いつもいつもありがとうございます!!

OSVERSIONINFOEX構造体も、6.0と.NETでは、中身が違うんですね〜
最初は6.0で書いていたのですが、コンパイルできなかったので.NETに変えちゃいました(6.0の方が使い慣れているんですよね〜)。

ちなみにこんな感じで、取得させてみました。
  OSVERSIONINFOEX ovi;
  //OSのバージョンを取得
    ovi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
    if(GetVersionEx((LPOSVERSIONINFO)&ovi) == FALSE)
  {
    sprintf(OSVersion, "OSのバージョン情報取得に失敗しました。");
  }
  else
  {
    //Windows95/98系
    if(ovi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
    {
      //Windows 95
      if(ovi.dwMinorVersion == 0)
      {
        if(ovi.wServicePackMajor == 0)
        {
          sprintf(OSVersion, "Microsoft Windows 95");
        }
        else
        {
          sprintf(OSVersion, "Microsoft Windows 95 with Servise Pack %d", ovi.wServicePackMajor);
        }
      }
      //Windows 98
      else if(ovi.dwMinorVersion == 10)
      {
        if(ovi.wServicePackMajor == 0)
        {
          sprintf(OSVersion, "Microsoft Windows 98");
        }
        else
        {
          sprintf(OSVersion, "Microsoft Windows 98 with Servise Pack %d", ovi.wServicePackMajor);
        }
      }
      //Windows Me
      else if(ovi.dwMinorVersion == 90)
      {
        if(ovi.wServicePackMajor == 0)
        {
          sprintf(OSVersion, "Microsoft Windows Me");
        }
        else
        {
          sprintf(OSVersion, "Microsoft Windows Me with Servise Pack %d", ovi.wServicePackMajor);
        }
      }
      else
      {
        sprintf(OSVersion, "OSのバージョンが不明です(Windows 95系)。");
      }
    }
    //あまりあり得ないが、Windows3.1系
    else if(ovi.dwPlatformId == VER_PLATFORM_WIN32s)
    {
        sprintf(OSVersion, "Microsoft Windows 3.1");
    }
    //Windows NT系
    else if(ovi.dwPlatformId == VER_PLATFORM_WIN32_NT)
    {
      //Windows NT 3.51
      if(ovi.dwMinorVersion == 51)
      {
        if(ovi.wServicePackMajor == 0)
        {
          sprintf(OSVersion, "Microsoft Windows NT 3.51");
        }
        else
        {
          sprintf(OSVersion, "Microsoft Windows NT 3.51 with Servise Pack %d", ovi.wServicePackMajor);
        }

      }

      //Windows NT 4
      else if(ovi.dwMinorVersion == 0 && ovi.dwMajorVersion == 4)
      {
        //Workstation
        if(ovi.wProductType == VER_NT_WORKSTATION)
        {
          if(ovi.wServicePackMajor == 0)
          {
            sprintf(OSVersion, "Microsoft Windows NT Workstation 4.0");
          }
          else
          {
            sprintf(OSVersion, "Microsoft Windows NT Workstation 4.0 with Servise Pack %d", ovi.wServicePackMajor);
          }
        }
        //Server
        else
        {
          //Enterprise
          if(ovi.wSuiteMask == VER_SUITE_ENTERPRISE)
          {
            if(ovi.wServicePackMajor == 0)
            {
              sprintf(OSVersion, "Microsoft Windows NT Server 4.0 Enterprise Edition");
            }
            else
            {
              sprintf(OSVersion, "Microsoft Windows NT Workstation 4.0 Enterprise Edition with Servise Pack %d", ovi.wServicePackMajor);
            }
          }
          //その他は通常のServerと判断させる
          else
          {
            if(ovi.wServicePackMajor == 0)
            {
              sprintf(OSVersion, "Microsoft Windows NT Server 4.0");
            }
            else
            {
              sprintf(OSVersion, "Microsoft Windows NT Workstation 4.0 with Servise Pack %d", ovi.wServicePackMajor);
            }
          }          
        }
      }

      //Windows 2000
      else if(ovi.dwMinorVersion == 0 && ovi.dwMajorVersion == 5)
      {
        //Professional
        if(ovi.wProductType == VER_NT_WORKSTATION)
        {
          if(ovi.wServicePackMajor == 0)
          {
            sprintf(OSVersion, "Microsoft Windows 2000 Professional");
          }
          else
          {
            sprintf(OSVersion, "Microsoft Windows 2000 Professional with Servise Pack %d", ovi.wServicePackMajor);
          }
        }
        //Server
        else
        {
          //Datacenter Server
          if(ovi.wSuiteMask == VER_SUITE_DATACENTER)
          {
            if(ovi.wServicePackMajor == 0)
            {
              sprintf(OSVersion, "Microsoft Windows 2000 Datacenter server");
            }
            else
            {
              sprintf(OSVersion, "Microsoft Windows 2000 Datacenter server with Servise Pack %d", ovi.wServicePackMajor);
            }
          }
          //Advanced Server
          else if(ovi.wSuiteMask == VER_SUITE_ENTERPRISE)
          {
            if(ovi.wServicePackMajor == 0)
            {
              sprintf(OSVersion, "Microsoft Windows 2000 Advanced server");
            }
            else
            {
              sprintf(OSVersion, "Microsoft Windows 2000 Advanced server with Servise Pack %d", ovi.wServicePackMajor);
            }
          }
          //その他は Serverと判断
          else
          {
            if(ovi.wServicePackMajor == 0)
            {
              sprintf(OSVersion, "Microsoft Windows 2000 Server");
            }
            else
            {
              sprintf(OSVersion, "Microsoft Windows 2000 Server with Servise Pack %d", ovi.wServicePackMajor);
            }
          }
        }
      }

      //Windows XP
      else if(ovi.dwMinorVersion == 1)
      {
        //Home Edition
        if(ovi.wSuiteMask == VER_SUITE_PERSONAL)
        {
          if(ovi.wServicePackMajor == 0)
          {
            sprintf(OSVersion, "Microsoft Windows XP Home");
          }
          else
          {
            sprintf(OSVersion, "Microsoft Windows XP Home with Servise Pack %d", ovi.wServicePackMajor);
          }
        }
        //XP Embedded
        else if(ovi.wSuiteMask == VER_SUITE_EMBEDDEDNT)
        {
          if(ovi.wServicePackMajor == 0)
          {
            sprintf(OSVersion, "Microsoft Windows XP Embedded");
          }
          else
          {
            sprintf(OSVersion, "Microsoft Windows XP Embedded with Servise Pack %d", ovi.wServicePackMajor);
          }
        }
        //Professional Edition
        else
        {
          if(ovi.wServicePackMajor == 0)
          {
            sprintf(OSVersion, "Microsoft Windows XP Professional");
          }
          else
          {
            sprintf(OSVersion, "Microsoft Windows XP Professional with Servise Pack %d", ovi.wServicePackMajor);
          }
        }
      }

      //Windows Server 2003
      else if(ovi.dwMinorVersion == 2)
      {
        //Enterprise Edition
        if(ovi.wSuiteMask == VER_SUITE_ENTERPRISE)
        {
          if(ovi.wServicePackMajor == 0)
          {
            sprintf(OSVersion, "Microsoft Windows Server 2003 Enterprise Edition");
          }
          else
          {
            sprintf(OSVersion, "Microsoft Windows Server 2003 Enterprise Edition with Servise Pack %d", ovi.wServicePackMajor);
          }
        }
        //Datacenter Edition
        else if(ovi.wSuiteMask == VER_SUITE_DATACENTER)
        {
          if(ovi.wServicePackMajor == 0)
          {
            sprintf(OSVersion, "Microsoft Windows Server 2003 Datacenter Edition");
          }
          else
          {
            sprintf(OSVersion, "Microsoft Windows Server 2003 Datacenter Edition with Servise Pack %d", ovi.wServicePackMajor);
          }
        }
        //Web Edition
        else if(ovi.wSuiteMask == VER_SUITE_BLADE)
        {
          if(ovi.wServicePackMajor == 0)
          {
            sprintf(OSVersion, "Microsoft Windows Server 2003 Web Edition");
          }
          else
          {
            sprintf(OSVersion, "Microsoft Windows Server 2003 Web Edition with Servise Pack %d", ovi.wServicePackMajor);
          }
        }
        //他は Standard Editionと判断
        else
        {
          if(ovi.wServicePackMajor == 0)
          {
            sprintf(OSVersion, "Microsoft Windows Server 2003 Standard Edition");
          }
          else
          {
            sprintf(OSVersion, "Microsoft Windows Server 2003 Standard Edition with Servise Pack %d", ovi.wServicePackMajor);
          }
        }
      }
    }
    else
    {
      sprintf(OSVersion, "不明なOSのバージョンです(最新?)");
    }
  }

細かく・・・とか言いながら、けっこういい加減です(笑)。
おかげで助かっちゃいました☆
ありがとうございます。


YuO  2004-11-04 07:07:07  No: 54965

えーっと,ページをちゃんと読んだのでしょうか?

末尾の方ですが,
> Client: Requires Windows XP, Windows 2000 Professional, or Windows NT Workstation 4.0 SP6 and later.
とあるように,OSVERSIONINFOEX構造体はNT 4.0のSP6以降でないと使えません。
それ以前のバージョンや,Windows 95系統,Windows 3.1 + Win32sといった環境では,OSVERSIONINFO構造体を使う必要があります。
つまりは,OSVERSIONINFO→OSVERSIONINFOEXと,二段階で呼び出すことになります。


どら  2004-11-04 08:08:53  No: 54966

・・・あ、やっぱりそうなんですね(^^;
早速ソースを書き直すとしますか・・・。

YuOさん、ありがとうございます(^^)


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加