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

KSPROPERTY_SPHLI

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

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

フィールド

フィールドサイズx64x86説明
HLISSWORD2+0+0ハイライト情報のサブストリーム識別子である。
ReservedWORD2+2+2予約フィールドで、0を設定する。
StartPTMDWORD4+4+4ハイライト開始のプレゼンテーション時刻(PTM)を示す。
EndPTMDWORD4+8+8ハイライト終了のプレゼンテーション時刻(PTM)を示す。
StartXWORD2+12+12ハイライト矩形の左端X座標を示す。
StartYWORD2+14+14ハイライト矩形の上端Y座標を示す。
StopXWORD2+16+16ハイライト矩形の右端X座標を示す。
StopYWORD2+18+18ハイライト矩形の下端Y座標を示す。
ColConKS_COLCON4+20+20ハイライト領域の色とコントラスト情報を表すKS_COLCONである。

各言語での定義

#include <windows.h>

// KS_COLCON  (x64 4 / x86 4 バイト)
typedef struct KS_COLCON {
    BYTE _bitfield1;
    BYTE _bitfield2;
    BYTE _bitfield3;
    BYTE _bitfield4;
} KS_COLCON;

// KSPROPERTY_SPHLI  (x64 24 / x86 24 バイト)
typedef struct KSPROPERTY_SPHLI {
    WORD HLISS;
    WORD Reserved;
    DWORD StartPTM;
    DWORD EndPTM;
    WORD StartX;
    WORD StartY;
    WORD StopX;
    WORD StopY;
    KS_COLCON ColCon;
} KSPROPERTY_SPHLI;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct KS_COLCON
{
    public byte _bitfield1;
    public byte _bitfield2;
    public byte _bitfield3;
    public byte _bitfield4;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct KSPROPERTY_SPHLI
{
    public ushort HLISS;
    public ushort Reserved;
    public uint StartPTM;
    public uint EndPTM;
    public ushort StartX;
    public ushort StartY;
    public ushort StopX;
    public ushort StopY;
    public KS_COLCON ColCon;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure KS_COLCON
    Public _bitfield1 As Byte
    Public _bitfield2 As Byte
    Public _bitfield3 As Byte
    Public _bitfield4 As Byte
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure KSPROPERTY_SPHLI
    Public HLISS As UShort
    Public Reserved As UShort
    Public StartPTM As UInteger
    Public EndPTM As UInteger
    Public StartX As UShort
    Public StartY As UShort
    Public StopX As UShort
    Public StopY As UShort
    Public ColCon As KS_COLCON
End Structure
import ctypes
from ctypes import wintypes

class KS_COLCON(ctypes.Structure):
    _fields_ = [
        ("_bitfield1", ctypes.c_ubyte),
        ("_bitfield2", ctypes.c_ubyte),
        ("_bitfield3", ctypes.c_ubyte),
        ("_bitfield4", ctypes.c_ubyte),
    ]

class KSPROPERTY_SPHLI(ctypes.Structure):
    _fields_ = [
        ("HLISS", ctypes.c_ushort),
        ("Reserved", ctypes.c_ushort),
        ("StartPTM", wintypes.DWORD),
        ("EndPTM", wintypes.DWORD),
        ("StartX", ctypes.c_ushort),
        ("StartY", ctypes.c_ushort),
        ("StopX", ctypes.c_ushort),
        ("StopY", ctypes.c_ushort),
        ("ColCon", KS_COLCON),
    ]
#[repr(C)]
pub struct KS_COLCON {
    pub _bitfield1: u8,
    pub _bitfield2: u8,
    pub _bitfield3: u8,
    pub _bitfield4: u8,
}

#[repr(C)]
pub struct KSPROPERTY_SPHLI {
    pub HLISS: u16,
    pub Reserved: u16,
    pub StartPTM: u32,
    pub EndPTM: u32,
    pub StartX: u16,
    pub StartY: u16,
    pub StopX: u16,
    pub StopY: u16,
    pub ColCon: KS_COLCON,
}
import "golang.org/x/sys/windows"

type KS_COLCON struct {
	_bitfield1 byte
	_bitfield2 byte
	_bitfield3 byte
	_bitfield4 byte
}

type KSPROPERTY_SPHLI struct {
	HLISS uint16
	Reserved uint16
	StartPTM uint32
	EndPTM uint32
	StartX uint16
	StartY uint16
	StopX uint16
	StopY uint16
	ColCon KS_COLCON
}
type
  KS_COLCON = record
    _bitfield1: Byte;
    _bitfield2: Byte;
    _bitfield3: Byte;
    _bitfield4: Byte;
  end;

  KSPROPERTY_SPHLI = record
    HLISS: Word;
    Reserved: Word;
    StartPTM: DWORD;
    EndPTM: DWORD;
    StartX: Word;
    StartY: Word;
    StopX: Word;
    StopY: Word;
    ColCon: KS_COLCON;
  end;
const KS_COLCON = extern struct {
    _bitfield1: u8,
    _bitfield2: u8,
    _bitfield3: u8,
    _bitfield4: u8,
};

const KSPROPERTY_SPHLI = extern struct {
    HLISS: u16,
    Reserved: u16,
    StartPTM: u32,
    EndPTM: u32,
    StartX: u16,
    StartY: u16,
    StopX: u16,
    StopY: u16,
    ColCon: KS_COLCON,
};
type
  KS_COLCON {.bycopy.} = object
    _bitfield1: uint8
    _bitfield2: uint8
    _bitfield3: uint8
    _bitfield4: uint8

  KSPROPERTY_SPHLI {.bycopy.} = object
    HLISS: uint16
    Reserved: uint16
    StartPTM: uint32
    EndPTM: uint32
    StartX: uint16
    StartY: uint16
    StopX: uint16
    StopY: uint16
    ColCon: KS_COLCON
struct KS_COLCON
{
    ubyte _bitfield1;
    ubyte _bitfield2;
    ubyte _bitfield3;
    ubyte _bitfield4;
}

struct KSPROPERTY_SPHLI
{
    ushort HLISS;
    ushort Reserved;
    uint StartPTM;
    uint EndPTM;
    ushort StartX;
    ushort StartY;
    ushort StopX;
    ushort StopY;
    KS_COLCON ColCon;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; KSPROPERTY_SPHLI サイズ: 24 バイト(x64)
dim st, 6    ; 4byte整数×6(構造体サイズ 24 / 4 切り上げ)
; HLISS : WORD (+0, 2byte)  wpoke st,0,値  /  値 = wpeek(st,0)
; Reserved : WORD (+2, 2byte)  wpoke st,2,値  /  値 = wpeek(st,2)
; StartPTM : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; EndPTM : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; StartX : WORD (+12, 2byte)  wpoke st,12,値  /  値 = wpeek(st,12)
; StartY : WORD (+14, 2byte)  wpoke st,14,値  /  値 = wpeek(st,14)
; StopX : WORD (+16, 2byte)  wpoke st,16,値  /  値 = wpeek(st,16)
; StopY : WORD (+18, 2byte)  wpoke st,18,値  /  値 = wpeek(st,18)
; ColCon : KS_COLCON (+20, 4byte)  varptr(st)+20 を基点に操作(4byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global KS_COLCON
    #field byte _bitfield1
    #field byte _bitfield2
    #field byte _bitfield3
    #field byte _bitfield4
#endstruct

#defstruct global KSPROPERTY_SPHLI
    #field short HLISS
    #field short Reserved
    #field int StartPTM
    #field int EndPTM
    #field short StartX
    #field short StartY
    #field short StopX
    #field short StopY
    #field KS_COLCON ColCon
#endstruct

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