Win32 API 日本語リファレンス
ホームSystem.SystemInformation › OSVERSIONINFOA

OSVERSIONINFOA

構造体
サイズx64: 148 バイト / x86: 148 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
dwOSVersionInfoSizeDWORD4+0+0このデータ構造体のサイズ (バイト単位)。このメンバーには sizeof(OSVERSIONINFO) を設定します。
dwMajorVersionDWORD4+4+4オペレーティング システムのメジャー バージョン番号。詳細については、「解説」を参照してください。
dwMinorVersionDWORD4+8+8オペレーティング システムのマイナー バージョン番号。詳細については、「解説」を参照してください。
dwBuildNumberDWORD4+12+12オペレーティング システムのビルド番号。
dwPlatformIdDWORD4+16+16

オペレーティング システムのプラットフォームです。このメンバーには次の値を指定できます。

意味
VER_PLATFORM_WIN32_NT
2
オペレーティング システムが Windows 7、Windows Server 2008、Windows Vista、Windows Server 2003、Windows XP、または Windows 2000 です。
szCSDVersionCHAR128+20+20システムにインストールされている最新の Service Pack を示す、"Service Pack 3" のような null で終わる文字列です。Service Pack がインストールされていない場合、この文字列は空になります。

公式ドキュメント

オペレーティング システムのバージョン情報を格納します。この情報には、メジャー バージョン番号、マイナー バージョン番号、ビルド番号、プラットフォーム識別子、およびオペレーティング システムに関する説明テキストが含まれます。この構造体は GetVersionEx 関数で使用されます。

追加のバージョン情報を取得するには、代わりに OSVERSIONINFOEX 構造体を GetVersionEx と共に使用してください。

解説(Remarks)

機能の有無を調べる方法として、バージョン情報に依存するのは最適ではありません。代わりに、対象の機能のドキュメントを参照してください。機能検出の一般的な手法の詳細については、 Operating System Version を参照してください。

特定のオペレーティング システムを必須とする場合は、その 1 つのオペレーティング システムだけを対象とする判定を設計するのではなく、サポートする最小バージョンとして扱ってください。こうすることで、検出コードは将来のバージョンの Windows でも動作し続けます。

次の表は、サポートされている各バージョンの Windows が返す値をまとめたものです。バージョン番号が同一のオペレーティング システムを区別するには、「その他」列の情報を使用してください。

オペレーティング システム バージョン番号 dwMajorVersion dwMinorVersion その他
Windows 10 10.0* 10 0 OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION
Windows Server 2016 10.0* 10 0 OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION
Windows 8.1 6.3* 6 3 OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION
Windows Server 2012 R2 6.3* 6 3 OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION
Windows 8 6.2 6 2 OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION
Windows Server 2012 6.2 6 2 OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION
Windows 7 6.1 6 1 OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION
Windows Server 2008 R2 6.1 6 1 OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION
Windows Server 2008 6.0 6 0 OSVERSIONINFOEX.wProductType != VER_NT_WORKSTATION
Windows Vista 6.0 6 0 OSVERSIONINFOEX.wProductType == VER_NT_WORKSTATION
Windows Server 2003 R2 5.2 5 2 GetSystemMetrics(SM_SERVERR2) != 0
Windows Server 2003 5.2 5 2 GetSystemMetrics(SM_SERVERR2) == 0
Windows XP 5.1 5 1 該当なし
Windows 2000 5.0 5 0 該当なし
* Windows 8.1 または Windows 10 向けにマニフェストが設定されているアプリケーションの場合の値です。Windows 8.1 または Windows 10 向けにマニフェストが設定されていないアプリケーションでは、Windows 8 の OS バージョン値 (6.2) が返されます。アプリケーションに Windows 8.1 または Windows 10 向けのマニフェストを設定するには、Targeting your application for Windows を参照してください。

使用例

例については、 Getting the System Version を参照してください。

メモ

winnt.h ヘッダーは OSVERSIONINFO を、UNICODE プリプロセッサ定数の定義に応じてこの関数の ANSI 版と Unicode 版を自動的に選択するエイリアスとして定義しています。エンコード中立のエイリアスの使用と、エンコード中立でないコードを混在させると不整合が生じ、コンパイル エラーや実行時エラーの原因となることがあります。詳細については、Conventions for Function Prototypes を参照してください。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// OSVERSIONINFOA  (x64 148 / x86 148 バイト)
typedef struct OSVERSIONINFOA {
    DWORD dwOSVersionInfoSize;
    DWORD dwMajorVersion;
    DWORD dwMinorVersion;
    DWORD dwBuildNumber;
    DWORD dwPlatformId;
    CHAR szCSDVersion[128];
} OSVERSIONINFOA;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct OSVERSIONINFOA
{
    public uint dwOSVersionInfoSize;
    public uint dwMajorVersion;
    public uint dwMinorVersion;
    public uint dwBuildNumber;
    public uint dwPlatformId;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)] public sbyte[] szCSDVersion;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure OSVERSIONINFOA
    Public dwOSVersionInfoSize As UInteger
    Public dwMajorVersion As UInteger
    Public dwMinorVersion As UInteger
    Public dwBuildNumber As UInteger
    Public dwPlatformId As UInteger
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=128)> Public szCSDVersion() As SByte
End Structure
import ctypes
from ctypes import wintypes

class OSVERSIONINFOA(ctypes.Structure):
    _fields_ = [
        ("dwOSVersionInfoSize", wintypes.DWORD),
        ("dwMajorVersion", wintypes.DWORD),
        ("dwMinorVersion", wintypes.DWORD),
        ("dwBuildNumber", wintypes.DWORD),
        ("dwPlatformId", wintypes.DWORD),
        ("szCSDVersion", ctypes.c_byte * 128),
    ]
#[repr(C)]
pub struct OSVERSIONINFOA {
    pub dwOSVersionInfoSize: u32,
    pub dwMajorVersion: u32,
    pub dwMinorVersion: u32,
    pub dwBuildNumber: u32,
    pub dwPlatformId: u32,
    pub szCSDVersion: [i8; 128],
}
import "golang.org/x/sys/windows"

type OSVERSIONINFOA struct {
	dwOSVersionInfoSize uint32
	dwMajorVersion uint32
	dwMinorVersion uint32
	dwBuildNumber uint32
	dwPlatformId uint32
	szCSDVersion [128]int8
}
type
  OSVERSIONINFOA = record
    dwOSVersionInfoSize: DWORD;
    dwMajorVersion: DWORD;
    dwMinorVersion: DWORD;
    dwBuildNumber: DWORD;
    dwPlatformId: DWORD;
    szCSDVersion: array[0..127] of Shortint;
  end;
const OSVERSIONINFOA = extern struct {
    dwOSVersionInfoSize: u32,
    dwMajorVersion: u32,
    dwMinorVersion: u32,
    dwBuildNumber: u32,
    dwPlatformId: u32,
    szCSDVersion: [128]i8,
};
type
  OSVERSIONINFOA {.bycopy.} = object
    dwOSVersionInfoSize: uint32
    dwMajorVersion: uint32
    dwMinorVersion: uint32
    dwBuildNumber: uint32
    dwPlatformId: uint32
    szCSDVersion: array[128, int8]
struct OSVERSIONINFOA
{
    uint dwOSVersionInfoSize;
    uint dwMajorVersion;
    uint dwMinorVersion;
    uint dwBuildNumber;
    uint dwPlatformId;
    byte[128] szCSDVersion;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; OSVERSIONINFOA サイズ: 148 バイト(x64)
dim st, 37    ; 4byte整数×37(構造体サイズ 148 / 4 切り上げ)
; dwOSVersionInfoSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; dwMajorVersion : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; dwMinorVersion : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; dwBuildNumber : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; dwPlatformId : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; szCSDVersion : CHAR (+20, 128byte)  varptr(st)+20 を基点に操作(128byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global OSVERSIONINFOA
    #field int dwOSVersionInfoSize
    #field int dwMajorVersion
    #field int dwMinorVersion
    #field int dwBuildNumber
    #field int dwPlatformId
    #field byte szCSDVersion 128
#endstruct

stdim st, OSVERSIONINFOA        ; NSTRUCT 変数を確保
st->dwOSVersionInfoSize = 100
mes "dwOSVersionInfoSize=" + st->dwOSVersionInfoSize