Top / Programming / C++Builder / Windowsのバージョンを取得する

Windowsのバージョンを取得する

VCLにはWindowsのバージョンを取得する変数や関数が用意されています。

C++Builder XE2以降では専用のTOSVersion構造体が用意されています。

Memo1->Lines->Add(TOSVersion::ToString());

switch (TOSVersion::Architecture) {
case TOSVersion::arIntelX86:
  Memo1->Lines->Add("Architecture: IntelX86");
  break;
case TOSVersion::arIntelX64:
  Memo1->Lines->Add("Architecture: IntelX64");
  break;
}

switch (TOSVersion::Platform) {
case TOSVersion::pfWindows:
  Memo1->Lines->Add("Platform: Windows");
  break;
case TOSVersion::pfMacOS:
  Memo1->Lines->Add("MacOS");
  break;
}

Memo1->Lines->Add("Build: " + IntToStr(TOSVersion::Build));
Memo1->Lines->Add("Major: " + IntToStr(TOSVersion::Major));
Memo1->Lines->Add("Minor: " + IntToStr(TOSVersion::Minor));
Memo1->Lines->Add("Name: " + TOSVersion::Name);
Memo1->Lines->Add("Service Pack - Major: " + IntToStr(TOSVersion::ServicePackMajor));
Memo1->Lines->Add("Service Pack - Minor: " + IntToStr(TOSVersion::ServicePackMinor));

Windows8

Windows7

WindowsXP

実行環境が特定のバージョン(またはそれ以上)であるかどうかを確かめる

TOSVersion.Check関数SysUtils.CheckWin32Version関数を使うと、実行環境が特定のバージョン(またはそれ以上)であるかどうかを確かめることができます。

TOSVersion.Check関数

static bool __fastcall Check(int AMajor);
static bool __fastcall Check(int AMajor, int AMinor);
static bool __fastcall Check(int AMajor, int AMinor, int AServicePackMajor);

SysUtils.CheckWin32Version関数

Boolean CheckWin32Version(int AMajor, int AMinor = 0);

渡された引数と同じまたはそれ以上のバージョンの時はtrueを返します。

使用例

if (TOSVersion::Check(5, 1, 3))
  ShowMessage("Windows XP SP3 以降");
else
  ShowMessage("Windows XP SP3 以前");

メジャーバージョン

メジャーバージョンはTOSVersion.MajorSysUtils.Win32MajorVersion変数で取得できます。

TOSVersion.Major

int majorVersion = TOSVersion::Major;

SysUtils.Win32MajorVersion変数

int majorVersion = Win32MajorVersion;

マイナーバージョン

マイナーバージョンはTOSVersion.MinorSysUtils.Win32MinorVersion変数で取得できます。

TOSVersion.Minor

int minorVersion = TOSVersion::Minor;

SysUtils.Win32MinorVersion変数

int minorVersion = Win32MinorVersion;

ビルドレベル

ビルドレベルはTOSVersion.BuildSysUtils.Win32BuildNumber変数で取得できます。

TOSVersion.Build

int buildNumber = TOSVersion::Build;

SysUtils.Win32BuildNumber変数

int buildNumber = Win32BuildNumber;

サービスパック

サービスパックのメジャーバージョン番号はTOSVersion.ServicePackMajor、 サービスパックのマイナーバージョン番号はTOSVersion.ServicePackMinorで取得できます。

int major = TOSVersion::ServicePackMajor;
int minor = TOSVersion::ServicePackMinor;

最新のサービスパックの名前はSysUtils.Win32CSDVersion変数で取得できます。

UnicodeString csdVersion = Win32CSDVersion;

プロセッサアーキテクチャ

プロセッサアーキテクチャはTOSVersion.Architectureで取得できます。

switch (TOSVersion::Architecture) {
case TOSVersion::arIntelX86:
  ShowMessage("Intel x86");
  break;
case TOSVersion::arIntelX64:
  ShowMessage("Intel x64 ");
  break;
}

プラットフォーム

プラットフォームはTOSVersion.Platformで取得できます。

switch (TOSVersion::Platform) {
case TOSVersion::pfWindows:
  ShowMessage("Windows");
  break;
case TOSVersion::pfMacOS:
  ShowMessage("MacOS");
  break;
}

Win32プラットフォームの型

Win32プラットフォームの型はSysUtils.Win32Platform変数で取得できます。

switch (Win32Platform) {
case VER_PLATFORM_WIN32s:
  ShowMessage("Win32s");
  break;
case VER_PLATFORM_WIN32_WINDOWS:
  ShowMessage("Windows 95");
  break;
case VER_PLATFORM_WIN32_NT:
  ShowMessage("Windows NT");
  break;
}

OSを識別する

Windowsの各バージョンの値は次のようになっています。

Windows 95

Windows 98

Windows Me

Windows NT 4.0

Windows 2000

Windows XP

Windows 2003

Windows Vista

Windows 7

Windows 8

Windows 8.1

GetVersionEx APIを使用する

VCLを使わない場合は、GetVersionEx APIを使用することでバージョン情報を取得できます。

#include <tchar.h>
#include <iostream>
using namespace std;
//---------------------------------------------------------------------------
#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
  OSVERSIONINFO info;
  ZeroMemory(&info, sizeof(OSVERSIONINFO));
  info.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);

  if (!GetVersionEx(&info)) {
    puts("error");
    return 0;
  }

  switch (info.dwPlatformId) {
  case VER_PLATFORM_WIN32s:
    puts("Win32s");
    break;
  case VER_PLATFORM_WIN32_WINDOWS:  // Windows 9x系
    switch (info.dwMinorVersion) {
    case 0:
      puts("Windows 95");
      break;
    case 10:
      puts("Windows 98");
      break;
    case 90:
      puts("Windows Me");
      break;
    default:
      puts("Windows 95 family");
      break;
    }
    break;
  case VER_PLATFORM_WIN32_NT: // Windows NT系
    switch (info.dwMajorVersion) {
    case 3:
      puts("Windows NT 3");
      break;
    case 4:
      puts("Windows NT 4");
      break;
    case 5:
      switch (info.dwMinorVersion) {
      case 0:
        puts("Windows 2000");
        break;
      case 1:
        puts("Windows XP");
        break;
      case 2:
        puts("Windows Server 2003");
        break;
      default:
        puts("Windows NT family");
        break;
      }
      break;
    case 6:
      switch (info.dwMinorVersion) {
      case 0:
        puts("Windows Vista");
        break;
      case 1:
        puts("Windows 7");
        break;
      }
    }
  }
  puts(info.szCSDVersion);
  return 0;
}

更新履歴