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

VerSetConditionMask

関数
バージョン比較用の条件マスク値を構築する。
DLLKERNEL32.dll呼出規約winapi対応OSWindows 2000 以降

シグネチャ

// KERNEL32.dll
#include <windows.h>

ULONGLONG VerSetConditionMask(
    ULONGLONG ConditionMask,
    VER_FLAGS TypeMask,
    BYTE Condition
);

パラメーター

名前方向
ConditionMaskULONGLONGin
TypeMaskVER_FLAGSin
ConditionBYTEin

戻り値の型: ULONGLONG

各言語での呼び出し定義

// KERNEL32.dll
#include <windows.h>

ULONGLONG VerSetConditionMask(
    ULONGLONG ConditionMask,
    VER_FLAGS TypeMask,
    BYTE Condition
);
[DllImport("KERNEL32.dll", ExactSpelling = true)]
static extern ulong VerSetConditionMask(
    ulong ConditionMask,   // ULONGLONG
    uint TypeMask,   // VER_FLAGS
    byte Condition   // BYTE
);
<DllImport("KERNEL32.dll", ExactSpelling:=True)>
Public Shared Function VerSetConditionMask(
    ConditionMask As ULong,   ' ULONGLONG
    TypeMask As UInteger,   ' VER_FLAGS
    Condition As Byte   ' BYTE
) As ULong
End Function
' ConditionMask : ULONGLONG
' TypeMask : VER_FLAGS
' Condition : BYTE
Declare PtrSafe Function VerSetConditionMask Lib "kernel32" ( _
    ByVal ConditionMask As LongLong, _
    ByVal TypeMask As Long, _
    ByVal Condition As Byte) As LongLong
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

VerSetConditionMask = ctypes.windll.kernel32.VerSetConditionMask
VerSetConditionMask.restype = ctypes.c_ulonglong
VerSetConditionMask.argtypes = [
    ctypes.c_ulonglong,  # ConditionMask : ULONGLONG
    wintypes.DWORD,  # TypeMask : VER_FLAGS
    ctypes.c_ubyte,  # Condition : BYTE
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('KERNEL32.dll')
VerSetConditionMask = Fiddle::Function.new(
  lib['VerSetConditionMask'],
  [
    -Fiddle::TYPE_LONG_LONG,  # ConditionMask : ULONGLONG
    -Fiddle::TYPE_INT,  # TypeMask : VER_FLAGS
    -Fiddle::TYPE_CHAR,  # Condition : BYTE
  ],
  -Fiddle::TYPE_LONG_LONG)
#[link(name = "kernel32")]
extern "system" {
    fn VerSetConditionMask(
        ConditionMask: u64,  // ULONGLONG
        TypeMask: u32,  // VER_FLAGS
        Condition: u8  // BYTE
    ) -> u64;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[DllImport("KERNEL32.dll")]
public static extern ulong VerSetConditionMask(ulong ConditionMask, uint TypeMask, byte Condition);
"@
$api = Add-Type -MemberDefinition $sig -Name 'KERNEL32_VerSetConditionMask' -Namespace Win32 -PassThru
# $api::VerSetConditionMask(ConditionMask, TypeMask, Condition)
#uselib "KERNEL32.dll"
#func global VerSetConditionMask "VerSetConditionMask" sptr, sptr, sptr
; VerSetConditionMask ConditionMask, TypeMask, Condition   ; 戻り値は stat
; ConditionMask : ULONGLONG -> "sptr"
; TypeMask : VER_FLAGS -> "sptr"
; Condition : BYTE -> "sptr"
; ※HSP3.7は int64 引数(64bit値渡し)に非対応です。
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
#uselib "KERNEL32.dll"
#cfunc global VerSetConditionMask "VerSetConditionMask" int64, int, int
; res = VerSetConditionMask(ConditionMask, TypeMask, Condition)
; ConditionMask : ULONGLONG -> "int64"
; TypeMask : VER_FLAGS -> "int"
; Condition : BYTE -> "int"
; ※int64 引数の DLL 値渡しは x64 ランタイム(hsp3_64)のみ対応(x86 は未対応)。
; ULONGLONG VerSetConditionMask(ULONGLONG ConditionMask, VER_FLAGS TypeMask, BYTE Condition)
#uselib "KERNEL32.dll"
#cfunc global VerSetConditionMask "VerSetConditionMask" int64, int, int
; res = VerSetConditionMask(ConditionMask, TypeMask, Condition)
; ConditionMask : ULONGLONG -> "int64"
; TypeMask : VER_FLAGS -> "int"
; Condition : BYTE -> "int"
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	kernel32 = windows.NewLazySystemDLL("KERNEL32.dll")
	procVerSetConditionMask = kernel32.NewProc("VerSetConditionMask")
)

// ConditionMask (ULONGLONG), TypeMask (VER_FLAGS), Condition (BYTE)
r1, _, err := procVerSetConditionMask.Call(
	uintptr(ConditionMask),
	uintptr(TypeMask),
	uintptr(Condition),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // ULONGLONG
function VerSetConditionMask(
  ConditionMask: UInt64;   // ULONGLONG
  TypeMask: DWORD;   // VER_FLAGS
  Condition: Byte   // BYTE
): UInt64; stdcall;
  external 'KERNEL32.dll' name 'VerSetConditionMask';
result := DllCall("KERNEL32\VerSetConditionMask"
    , "Int64", ConditionMask   ; ULONGLONG
    , "UInt", TypeMask   ; VER_FLAGS
    , "UChar", Condition   ; BYTE
    , "Int64")   ; return: ULONGLONG
●VerSetConditionMask(ConditionMask, TypeMask, Condition) = DLL("KERNEL32.dll", "qword VerSetConditionMask(qword, dword, byte)")
# 呼び出し: VerSetConditionMask(ConditionMask, TypeMask, Condition)
# ConditionMask : ULONGLONG -> "qword"
# TypeMask : VER_FLAGS -> "dword"
# Condition : BYTE -> "byte"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。