Win32 API 日本語リファレンス
ホームMedia.KernelStreaming › KSPROPERTY_CAMERACONTROL_S_EX

KSPROPERTY_CAMERACONTROL_S_EX

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

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

フィールド

フィールドサイズx64x86説明
PropertyKSIDENTIFIER8+0+0対象プロパティを識別するKSIDENTIFIER。プロパティセットGUID・ID・フラグを保持する。
ValueINT4+8+8カメラ制御(フォーカス/ズーム等)の設定値。
FlagsDWORD4+12+12値が自動か手動かなどを示すフラグ(KSPROPERTY_CAMERACONTROL_FLAGS_*)。
CapabilitiesDWORD4+16+16サポートされる機能を示すケイパビリティフラグ。
FocusRectRECT16+20+20オートフォーカス対象の矩形領域を表すRECT。

各言語での定義

#include <windows.h>

// KSIDENTIFIER  (x64 8 / x86 8 バイト)
typedef struct KSIDENTIFIER {
    _Anonymous_e__Union Anonymous;
} KSIDENTIFIER;

// RECT  (x64 16 / x86 16 バイト)
typedef struct RECT {
    INT left;
    INT top;
    INT right;
    INT bottom;
} RECT;

// KSPROPERTY_CAMERACONTROL_S_EX  (x64 40 / x86 40 バイト)
typedef struct KSPROPERTY_CAMERACONTROL_S_EX {
    KSIDENTIFIER Property;
    INT Value;
    DWORD Flags;
    DWORD Capabilities;
    RECT FocusRect;
} KSPROPERTY_CAMERACONTROL_S_EX;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct KSIDENTIFIER
{
    public _Anonymous_e__Union Anonymous;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct RECT
{
    public int left;
    public int top;
    public int right;
    public int bottom;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct KSPROPERTY_CAMERACONTROL_S_EX
{
    public KSIDENTIFIER Property;
    public int Value;
    public uint Flags;
    public uint Capabilities;
    public RECT FocusRect;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure KSIDENTIFIER
    Public Anonymous As _Anonymous_e__Union
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure RECT
    Public left As Integer
    Public top As Integer
    Public right As Integer
    Public bottom As Integer
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure KSPROPERTY_CAMERACONTROL_S_EX
    Public Property As KSIDENTIFIER
    Public Value As Integer
    Public Flags As UInteger
    Public Capabilities As UInteger
    Public FocusRect As RECT
End Structure
import ctypes
from ctypes import wintypes

class KSIDENTIFIER(ctypes.Structure):
    _fields_ = [
        ("Anonymous", _Anonymous_e__Union),
    ]

class RECT(ctypes.Structure):
    _fields_ = [
        ("left", ctypes.c_int),
        ("top", ctypes.c_int),
        ("right", ctypes.c_int),
        ("bottom", ctypes.c_int),
    ]

class KSPROPERTY_CAMERACONTROL_S_EX(ctypes.Structure):
    _fields_ = [
        ("Property", KSIDENTIFIER),
        ("Value", ctypes.c_int),
        ("Flags", wintypes.DWORD),
        ("Capabilities", wintypes.DWORD),
        ("FocusRect", RECT),
    ]
#[repr(C)]
pub struct KSIDENTIFIER {
    pub Anonymous: _Anonymous_e__Union,
}

#[repr(C)]
pub struct RECT {
    pub left: i32,
    pub top: i32,
    pub right: i32,
    pub bottom: i32,
}

#[repr(C)]
pub struct KSPROPERTY_CAMERACONTROL_S_EX {
    pub Property: KSIDENTIFIER,
    pub Value: i32,
    pub Flags: u32,
    pub Capabilities: u32,
    pub FocusRect: RECT,
}
import "golang.org/x/sys/windows"

type KSIDENTIFIER struct {
	Anonymous _Anonymous_e__Union
}

type RECT struct {
	left int32
	top int32
	right int32
	bottom int32
}

type KSPROPERTY_CAMERACONTROL_S_EX struct {
	Property KSIDENTIFIER
	Value int32
	Flags uint32
	Capabilities uint32
	FocusRect RECT
}
type
  KSIDENTIFIER = record
    Anonymous: _Anonymous_e__Union;
  end;

  RECT = record
    left: Integer;
    top: Integer;
    right: Integer;
    bottom: Integer;
  end;

  KSPROPERTY_CAMERACONTROL_S_EX = record
    Property: KSIDENTIFIER;
    Value: Integer;
    Flags: DWORD;
    Capabilities: DWORD;
    FocusRect: RECT;
  end;
const KSIDENTIFIER = extern struct {
    Anonymous: _Anonymous_e__Union,
};

const RECT = extern struct {
    left: i32,
    top: i32,
    right: i32,
    bottom: i32,
};

const KSPROPERTY_CAMERACONTROL_S_EX = extern struct {
    Property: KSIDENTIFIER,
    Value: i32,
    Flags: u32,
    Capabilities: u32,
    FocusRect: RECT,
};
type
  KSIDENTIFIER {.bycopy.} = object
    Anonymous: _Anonymous_e__Union

  RECT {.bycopy.} = object
    left: int32
    top: int32
    right: int32
    bottom: int32

  KSPROPERTY_CAMERACONTROL_S_EX {.bycopy.} = object
    Property: KSIDENTIFIER
    Value: int32
    Flags: uint32
    Capabilities: uint32
    FocusRect: RECT
struct KSIDENTIFIER
{
    _Anonymous_e__Union Anonymous;
}

struct RECT
{
    int left;
    int top;
    int right;
    int bottom;
}

struct KSPROPERTY_CAMERACONTROL_S_EX
{
    KSIDENTIFIER Property;
    int Value;
    uint Flags;
    uint Capabilities;
    RECT FocusRect;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; KSPROPERTY_CAMERACONTROL_S_EX サイズ: 40 バイト(x64)
dim st, 10    ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; Property : KSIDENTIFIER (+0, 8byte)  varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; Value : INT (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; Flags : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; Capabilities : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; FocusRect : RECT (+20, 16byte)  varptr(st)+20 を基点に操作(16byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global KSIDENTIFIER
    #field byte Anonymous 8
#endstruct

#defstruct global RECT
    #field int left
    #field int top
    #field int right
    #field int bottom
#endstruct

#defstruct global KSPROPERTY_CAMERACONTROL_S_EX
    #field KSIDENTIFIER Property
    #field int Value
    #field int Flags
    #field int Capabilities
    #field RECT FocusRect
#endstruct

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