DIEFFECTATTRIBUTES
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| dwEffectId | DWORD | 4 | +0 | +0 | エフェクトを識別するためにドライバーへ渡される任意の 32 ビット値を指定します。ドライバーはこの値を IDirectInputEffectDriver::DownloadEffect メソッドの dwEffectID パラメーターとして受け取ります。 |
| dwEffType | DWORD | 4 | +4 | +4 | エフェクトのカテゴリと機能を記述します。このメンバーは次の値のいずれか 1 つで構成されていなければなりません: DIEFT_CONSTANTFORCEエフェクトが定常力 (constant force) エフェクトであることを表します。定常力エフェクトを作成または変更する場合、DIEFFECT 構造体の lpvTypeSpecificParams メンバーは DICONSTANTFORCE 構造体を指し、DIEFFECT 構造体の cbTypeSpecificParams メンバーには sizeof(DICONSTANTFORCE) を設定します。 DIEFT_RAMPFORCEエフェクトがランプフォース (ramp-force) エフェクトであることを表します。ランプフォースエフェクトを作成または変更する場合、DIEFFECT 構造体の lpvTypeSpecificParams メンバーは DIRAMPFORCE 構造体を指し、DIEFFECT 構造体の cbTypeSpecificParams メンバーには sizeof(DIRAMPFORCE) を設定します。 DIEFT_PERIODICエフェクトが周期的 (periodic) エフェクトであることを表します。周期的エフェクトを作成または変更する場合、DIEFFECT 構造体の lpvTypeSpecificParams メンバーは DIPERIODIC 構造体を指し、DIEFFECT 構造体の cbTypeSpecificParams メンバーには sizeof(DIPERIODIC) を設定します。 DIEFT_CONDITIONエフェクトがコンディション (condition) であることを表します。コンディションを作成または変更する場合、DIEFFECT 構造体の lpvTypeSpecificParams メンバーは DICONDITION 構造体の配列 (ちょうど 1 つの DICONDITION 構造体、または軸ごとに 1 つの DICONDITION 構造体) を指し、DIEFFECT 構造体の cbTypeSpecificParams メンバーにはそれぞれ sizeof(DICONDITION) または cAxis * sizeof(DICONDITION) を設定します。cbTypeSpecificParams に sizeof(DICONDITION) が設定されている場合、エフェクトは回転可能な単一軸のコンディションを表します。cbTypeSpecificParams に cAxis * sizeof(DICONDITION) が設定されている場合、エフェクトは複数軸のコンディションを表し、各 DICONDITION 構造体は rgdwAxes リスト内の対応する軸に適用されます。 DIEFT_CUSTOMFORCEエフェクトがカスタムフォースエフェクトであることを表します。カスタムフォースエフェクトを作成または変更する場合、DIEFFECT 構造体の lpvTypeSpecificParams メンバーは DICUSTOMFORCE 構造体を指し、DIEFFECT 構造体の cbTypeSpecificParams メンバーには sizeof(DICUSTOMFORCE) を設定します。 DIEFT_HARDWAREエフェクトがハードウェア固有のエフェクトであることを表します。ハードウェアベンダーは、そのエフェクトの使用方法に関する追加のドキュメントをアプリケーション開発者に提供する必要があります。カテゴリコードに加えて、dwEffTtype メンバーには、エフェクトの機能を示す次のフラグを 0 個、1 個、または複数含めることもできます: DIEFT_FFATTACKこのエフェクトのエフェクトジェネレーターがアタックエンベロープのパラメーターをサポートします。エフェクトジェネレーターがアタックをサポートしていない場合、DIENVELOPE 構造体のアタックレベルおよびアタックタイムのパラメーターはエフェクトによって無視されます。 DIEFT_FFFADEこのエフェクトのエフェクトジェネレーターがフェードのパラメーターをサポートします。エフェクトジェネレーターがフェードをサポートしていない場合、DIENVELOPE 構造体のフェードレベルおよびフェードタイムのパラメーターはエフェクトによって無視されます。DIEFT_FFATTACK と DIEFT_FFFADE のいずれも設定されていない場合、エフェクトはエンベロープをサポートせず、指定されたエンベロープは無視されます。 DIEFT_SATURATIONこのエフェクトのエフェクトジェネレーターがコンディションエフェクトのサチュレーションをサポートします。エフェクトジェネレーターがサチュレーションをサポートしていない場合、コンディションによって生成される力は、デバイスが生成できる最大の力によってのみ制限されます。 DIEFT_POSNEGCOEFFICIENTSこのエフェクトのエフェクトジェネレーターがコンディションに対して 2 つの係数値 (軸の正方向の変位用と負方向の変位用) をサポートします。デバイスが両方の係数をサポートしていない場合、DICONDITION 構造体の負の係数は無視され、正の係数が両方向に使用されます。 DIEFT_POSNEGSATURATIONこのエフェクトのエフェクトジェネレーターが、正と負の両方の力の出力に対する最大サチュレーションをサポートします。デバイスが両方のサチュレーション値をサポートしていない場合、DICONDITION 構造体の負のサチュレーションは無視され、正のサチュレーションが両方向に使用されます。 |
| dwStaticParams | DWORD | 4 | +8 | +8 | エフェクトがサポートするパラメーターを記述します。たとえば DIEP_ENVELOPE が設定されている場合、そのエフェクトはエンベロープをサポートします。すべてのエフェクトは、少なくとも DIEP_DURATION、DIEP_AXES、DIEP_TYPESPECIFICPARAMS をサポートする必要があります。アプリケーションがデバイスでサポートされていないエフェクトパラメーターを使用しようとしても、エラーにはなりません。サポートされていないパラメーターは単に無視されます。この値には、次のフラグを 0 個、1 個、または複数指定できます: DIEP_DURATIONエフェクトが再生されていないときに、ドライバーがエフェクトの dwDuration (DIEFFECT 構造体を参照) の変更をサポートすることを示します。 DIEP_SAMPLEPERIODエフェクトが再生されていないときに、ドライバーがエフェクトの dwSamplePeriod (DIEFFECT 構造体を参照) の変更をサポートすることを示します。 DIEP_GAINエフェクトが再生されていないときに、ドライバーがエフェクトの dwGain (DIEFFECT 構造体を参照) の変更をサポートすることを示します。 DIEP_TRIGGERBUTTONエフェクトが再生されていないときに、ドライバーがエフェクトの dwTriggerButton (DIEFFECT 構造体を参照) の変更をサポートすることを示します。 DIEP_TRIGGERREPEATINTERVALエフェクトが再生されていないときに、ドライバーがエフェクトの dwTriggerRepeatInterval (DIEFFECT 構造体を参照) の変更をサポートすることを示します。 DIEP_AXESエフェクトが再生されていないときに、ドライバーがエフェクトの cAxes および rgdwAxes (DIEFFECT 構造体を参照) の変更をサポートすることを示します。 DIEP_DIRECTIONエフェクトが再生されていないときに、ドライバーがエフェクトの cAxes および rglDirection (DIEFFECT 構造体を参照) の変更をサポートすることを示します。(値をどの座標系で解釈するかは、DIEFFECT 構造体の dwFlags メンバーが DIEFF_CARTESIAN または DIEFF_POLAR によって指定します。) DIEP_ENVELOPEエフェクトが再生されていないときに、ドライバーがエフェクトの lpEnvelope (DIEFFECT 構造体を参照) の変更をサポートすることを示します。 DIEP_TYPESPECIFICPARAMSエフェクトが再生されていないときに、ドライバーがエフェクトの cbTypeSpecificParams および lpTypeSpecificParams (DIEFFECT 構造体を参照) の変更をサポートすることを示します。DIEFFECT 構造体の lpTypeSpecificParams メンバーが指すバッファーは、エフェクトが存在する間 (または型固有のパラメーターに新しい値が設定されるまで) 有効なままでなければならない点に注意してください。DirectInput はこのバッファーのプライベートなコピーを作成しません。 |
| dwDynamicParams | DWORD | 4 | +12 | +12 | エフェクトの再生中に変更できるエフェクトのパラメーターを記述します。アプリケーションがエフェクトの再生中にパラメーターを変更しようとしたときに、ドライバーがそのエフェクトの動的な変更をサポートしていない場合、ドライバーは DIERR_EFFECTPLAYING を返します。このメンバーは dwStaticParams メンバーと同じフラグを使用しますが、フラグは、エフェクトが再生されていないときではなく再生中に、ドライバーがエフェクトのパラメーターを変更できるかどうかを表すものとして解釈されます。 |
| dwCoords | DWORD | 4 | +16 | +16 | エフェクトがサポートする座標系を示す 1 つ以上の座標系フラグ (DIEFF_CARTESIAN、DIEFF_POLAR、DIEFF_SPHERICAL) です。少なくとも 1 つの座標系をサポートしていなければなりません。アプリケーションがサポートされていない座標系で方向を設定しようとした場合、DirectInput はそれをデバイスがサポートする座標系に自動的に変換します。 |
公式ドキュメント
DIEFFECTATTRIBUTES 構造体は、フォースフィードバックデバイスがサポートする各エフェクトについて、レジストリキーの "Attributes" 値に含まれる情報を記述します。
解説(Remarks)
DIEFFECT、DICONSTANTFORCE、DIRAMPFORCE、DIPERIODIC、DICONDITION、DICUSTOMFORCE、DIENVELOPE の各構造体については、DirectX SDK の DirectInput のセクションを参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#include <windows.h>
// DIEFFECTATTRIBUTES (x64 20 / x86 20 バイト)
typedef struct DIEFFECTATTRIBUTES {
DWORD dwEffectId;
DWORD dwEffType;
DWORD dwStaticParams;
DWORD dwDynamicParams;
DWORD dwCoords;
} DIEFFECTATTRIBUTES;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DIEFFECTATTRIBUTES
{
public uint dwEffectId;
public uint dwEffType;
public uint dwStaticParams;
public uint dwDynamicParams;
public uint dwCoords;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DIEFFECTATTRIBUTES
Public dwEffectId As UInteger
Public dwEffType As UInteger
Public dwStaticParams As UInteger
Public dwDynamicParams As UInteger
Public dwCoords As UInteger
End Structureimport ctypes
from ctypes import wintypes
class DIEFFECTATTRIBUTES(ctypes.Structure):
_fields_ = [
("dwEffectId", wintypes.DWORD),
("dwEffType", wintypes.DWORD),
("dwStaticParams", wintypes.DWORD),
("dwDynamicParams", wintypes.DWORD),
("dwCoords", wintypes.DWORD),
]#[repr(C)]
pub struct DIEFFECTATTRIBUTES {
pub dwEffectId: u32,
pub dwEffType: u32,
pub dwStaticParams: u32,
pub dwDynamicParams: u32,
pub dwCoords: u32,
}import "golang.org/x/sys/windows"
type DIEFFECTATTRIBUTES struct {
dwEffectId uint32
dwEffType uint32
dwStaticParams uint32
dwDynamicParams uint32
dwCoords uint32
}type
DIEFFECTATTRIBUTES = record
dwEffectId: DWORD;
dwEffType: DWORD;
dwStaticParams: DWORD;
dwDynamicParams: DWORD;
dwCoords: DWORD;
end;const DIEFFECTATTRIBUTES = extern struct {
dwEffectId: u32,
dwEffType: u32,
dwStaticParams: u32,
dwDynamicParams: u32,
dwCoords: u32,
};type
DIEFFECTATTRIBUTES {.bycopy.} = object
dwEffectId: uint32
dwEffType: uint32
dwStaticParams: uint32
dwDynamicParams: uint32
dwCoords: uint32struct DIEFFECTATTRIBUTES
{
uint dwEffectId;
uint dwEffType;
uint dwStaticParams;
uint dwDynamicParams;
uint dwCoords;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DIEFFECTATTRIBUTES サイズ: 20 バイト(x64)
dim st, 5 ; 4byte整数×5(構造体サイズ 20 / 4 切り上げ)
; dwEffectId : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; dwEffType : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; dwStaticParams : DWORD (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; dwDynamicParams : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; dwCoords : DWORD (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global DIEFFECTATTRIBUTES
#field int dwEffectId
#field int dwEffType
#field int dwStaticParams
#field int dwDynamicParams
#field int dwCoords
#endstruct
stdim st, DIEFFECTATTRIBUTES ; NSTRUCT 変数を確保
st->dwEffectId = 100
mes "dwEffectId=" + st->dwEffectId