ホーム › Devices.HumanInterfaceDevice › DIEFFECT
DIEFFECT
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| dwSize | DWORD | 4 | +0 | +0 | この構造体のバイトサイズ。版の識別に用いる。 |
| dwFlags | DWORD | 4 | +4 | +4 | 座標系や軸指定方法などを示すフラグ群(DIEFF_*)。 |
| dwDuration | DWORD | 4 | +8 | +8 | エフェクト全体の継続時間をマイクロ秒単位で示す。無限はINFINITE。 |
| dwSamplePeriod | DWORD | 4 | +12 | +12 | 再生サンプル周期をマイクロ秒単位で示す。0で既定値。 |
| dwGain | DWORD | 4 | +16 | +16 | エフェクト全体のゲイン(倍率)。0〜10000の範囲。 |
| dwTriggerButton | DWORD | 4 | +20 | +20 | エフェクトを起動するトリガーボタン番号。なしはDIEB_NOTRIGGER。 |
| dwTriggerRepeatInterval | DWORD | 4 | +24 | +24 | トリガー押下中の繰り返し間隔をマイクロ秒単位で示す。 |
| cAxes | DWORD | 4 | +28 | +28 | エフェクトが作用する軸の数。 |
| rgdwAxes | DWORD* | 8/4 | +32 | +32 | 対象軸のオフセット/種別を並べた配列へのポインター。 |
| rglDirection | INT* | 8/4 | +40 | +36 | 各軸方向の値を並べた配列へのポインター。 |
| lpEnvelope | DIENVELOPE* | 8/4 | +48 | +40 | 適用するエンベロープ構造体へのポインター。不要ならNULL。 |
| cbTypeSpecificParams | DWORD | 4 | +56 | +44 | エフェクト種別固有パラメーターのバイトサイズ。 |
| lpvTypeSpecificParams | void* | 8/4 | +64 | +48 | エフェクト種別固有パラメーターへのポインター。 |
| dwStartDelay | DWORD | 4 | +72 | +52 | 再生開始までの遅延時間をマイクロ秒単位で示す。 |
各言語での定義
#include <windows.h>
// DIEFFECT (x64 80 / x86 56 バイト)
typedef struct DIEFFECT {
DWORD dwSize;
DWORD dwFlags;
DWORD dwDuration;
DWORD dwSamplePeriod;
DWORD dwGain;
DWORD dwTriggerButton;
DWORD dwTriggerRepeatInterval;
DWORD cAxes;
DWORD* rgdwAxes;
INT* rglDirection;
DIENVELOPE* lpEnvelope;
DWORD cbTypeSpecificParams;
void* lpvTypeSpecificParams;
DWORD dwStartDelay;
} DIEFFECT;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DIEFFECT
{
public uint dwSize;
public uint dwFlags;
public uint dwDuration;
public uint dwSamplePeriod;
public uint dwGain;
public uint dwTriggerButton;
public uint dwTriggerRepeatInterval;
public uint cAxes;
public IntPtr rgdwAxes;
public IntPtr rglDirection;
public IntPtr lpEnvelope;
public uint cbTypeSpecificParams;
public IntPtr lpvTypeSpecificParams;
public uint dwStartDelay;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DIEFFECT
Public dwSize As UInteger
Public dwFlags As UInteger
Public dwDuration As UInteger
Public dwSamplePeriod As UInteger
Public dwGain As UInteger
Public dwTriggerButton As UInteger
Public dwTriggerRepeatInterval As UInteger
Public cAxes As UInteger
Public rgdwAxes As IntPtr
Public rglDirection As IntPtr
Public lpEnvelope As IntPtr
Public cbTypeSpecificParams As UInteger
Public lpvTypeSpecificParams As IntPtr
Public dwStartDelay As UInteger
End Structureimport ctypes
from ctypes import wintypes
class DIEFFECT(ctypes.Structure):
_fields_ = [
("dwSize", wintypes.DWORD),
("dwFlags", wintypes.DWORD),
("dwDuration", wintypes.DWORD),
("dwSamplePeriod", wintypes.DWORD),
("dwGain", wintypes.DWORD),
("dwTriggerButton", wintypes.DWORD),
("dwTriggerRepeatInterval", wintypes.DWORD),
("cAxes", wintypes.DWORD),
("rgdwAxes", ctypes.c_void_p),
("rglDirection", ctypes.c_void_p),
("lpEnvelope", ctypes.c_void_p),
("cbTypeSpecificParams", wintypes.DWORD),
("lpvTypeSpecificParams", ctypes.c_void_p),
("dwStartDelay", wintypes.DWORD),
]#[repr(C)]
pub struct DIEFFECT {
pub dwSize: u32,
pub dwFlags: u32,
pub dwDuration: u32,
pub dwSamplePeriod: u32,
pub dwGain: u32,
pub dwTriggerButton: u32,
pub dwTriggerRepeatInterval: u32,
pub cAxes: u32,
pub rgdwAxes: *mut core::ffi::c_void,
pub rglDirection: *mut core::ffi::c_void,
pub lpEnvelope: *mut core::ffi::c_void,
pub cbTypeSpecificParams: u32,
pub lpvTypeSpecificParams: *mut core::ffi::c_void,
pub dwStartDelay: u32,
}import "golang.org/x/sys/windows"
type DIEFFECT struct {
dwSize uint32
dwFlags uint32
dwDuration uint32
dwSamplePeriod uint32
dwGain uint32
dwTriggerButton uint32
dwTriggerRepeatInterval uint32
cAxes uint32
rgdwAxes uintptr
rglDirection uintptr
lpEnvelope uintptr
cbTypeSpecificParams uint32
lpvTypeSpecificParams uintptr
dwStartDelay uint32
}type
DIEFFECT = record
dwSize: DWORD;
dwFlags: DWORD;
dwDuration: DWORD;
dwSamplePeriod: DWORD;
dwGain: DWORD;
dwTriggerButton: DWORD;
dwTriggerRepeatInterval: DWORD;
cAxes: DWORD;
rgdwAxes: Pointer;
rglDirection: Pointer;
lpEnvelope: Pointer;
cbTypeSpecificParams: DWORD;
lpvTypeSpecificParams: Pointer;
dwStartDelay: DWORD;
end;const DIEFFECT = extern struct {
dwSize: u32,
dwFlags: u32,
dwDuration: u32,
dwSamplePeriod: u32,
dwGain: u32,
dwTriggerButton: u32,
dwTriggerRepeatInterval: u32,
cAxes: u32,
rgdwAxes: ?*anyopaque,
rglDirection: ?*anyopaque,
lpEnvelope: ?*anyopaque,
cbTypeSpecificParams: u32,
lpvTypeSpecificParams: ?*anyopaque,
dwStartDelay: u32,
};type
DIEFFECT {.bycopy.} = object
dwSize: uint32
dwFlags: uint32
dwDuration: uint32
dwSamplePeriod: uint32
dwGain: uint32
dwTriggerButton: uint32
dwTriggerRepeatInterval: uint32
cAxes: uint32
rgdwAxes: pointer
rglDirection: pointer
lpEnvelope: pointer
cbTypeSpecificParams: uint32
lpvTypeSpecificParams: pointer
dwStartDelay: uint32struct DIEFFECT
{
uint dwSize;
uint dwFlags;
uint dwDuration;
uint dwSamplePeriod;
uint dwGain;
uint dwTriggerButton;
uint dwTriggerRepeatInterval;
uint cAxes;
void* rgdwAxes;
void* rglDirection;
void* lpEnvelope;
uint cbTypeSpecificParams;
void* lpvTypeSpecificParams;
uint dwStartDelay;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; DIEFFECT サイズ: 56 バイト(x86)
dim st, 14 ; 4byte整数×14(構造体サイズ 56 / 4 切り上げ)
; dwSize : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; dwFlags : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; dwDuration : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; dwSamplePeriod : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; dwGain : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; dwTriggerButton : DWORD (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; dwTriggerRepeatInterval : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; cAxes : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; rgdwAxes : DWORD* (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; rglDirection : INT* (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; lpEnvelope : DIENVELOPE* (+40, 4byte) varptr(st)+40 を基点に操作(4byte:入れ子/配列)
; cbTypeSpecificParams : DWORD (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; lpvTypeSpecificParams : void* (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; dwStartDelay : DWORD (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DIEFFECT サイズ: 80 バイト(x64)
dim st, 20 ; 4byte整数×20(構造体サイズ 80 / 4 切り上げ)
; dwSize : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; dwFlags : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; dwDuration : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; dwSamplePeriod : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; dwGain : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; dwTriggerButton : DWORD (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; dwTriggerRepeatInterval : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; cAxes : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; rgdwAxes : DWORD* (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; rglDirection : INT* (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; lpEnvelope : DIENVELOPE* (+48, 8byte) varptr(st)+48 を基点に操作(8byte:入れ子/配列)
; cbTypeSpecificParams : DWORD (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; lpvTypeSpecificParams : void* (+64, 8byte) qpoke st,64,値 / qpeek(st,64) ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; dwStartDelay : DWORD (+72, 4byte) st.18 = 値 / 値 = st.18 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global DIEFFECT
#field int dwSize
#field int dwFlags
#field int dwDuration
#field int dwSamplePeriod
#field int dwGain
#field int dwTriggerButton
#field int dwTriggerRepeatInterval
#field int cAxes
#field intptr rgdwAxes
#field intptr rglDirection
#field intptr lpEnvelope
#field int cbTypeSpecificParams
#field intptr lpvTypeSpecificParams
#field int dwStartDelay
#endstruct
stdim st, DIEFFECT ; NSTRUCT 変数を確保
st->dwSize = 100
mes "dwSize=" + st->dwSize