Win32 API 日本語リファレンス
ホームDevices.HumanInterfaceDevice › DIEFFECTATTRIBUTES

DIEFFECTATTRIBUTES

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

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

フィールド

フィールドサイズx64x86説明
dwEffectIdDWORD4+0+0エフェクトを識別するためにドライバーへ渡される任意の 32 ビット値を指定します。ドライバーはこの値を IDirectInputEffectDriver::DownloadEffect メソッドの dwEffectID パラメーターとして受け取ります。
dwEffTypeDWORD4+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_FFATTACKDIEFT_FFFADE のいずれも設定されていない場合、エフェクトはエンベロープをサポートせず、指定されたエンベロープは無視されます。

DIEFT_SATURATION

このエフェクトのエフェクトジェネレーターがコンディションエフェクトのサチュレーションをサポートします。エフェクトジェネレーターがサチュレーションをサポートしていない場合、コンディションによって生成される力は、デバイスが生成できる最大の力によってのみ制限されます。

DIEFT_POSNEGCOEFFICIENTS

このエフェクトのエフェクトジェネレーターがコンディションに対して 2 つの係数値 (軸の正方向の変位用と負方向の変位用) をサポートします。デバイスが両方の係数をサポートしていない場合、DICONDITION 構造体の負の係数は無視され、正の係数が両方向に使用されます。

DIEFT_POSNEGSATURATION

このエフェクトのエフェクトジェネレーターが、正と負の両方の力の出力に対する最大サチュレーションをサポートします。デバイスが両方のサチュレーション値をサポートしていない場合、DICONDITION 構造体の負のサチュレーションは無視され、正のサチュレーションが両方向に使用されます。

dwStaticParamsDWORD4+8+8

エフェクトがサポートするパラメーターを記述します。たとえば DIEP_ENVELOPE が設定されている場合、そのエフェクトはエンベロープをサポートします。すべてのエフェクトは、少なくとも DIEP_DURATIONDIEP_AXESDIEP_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 はこのバッファーのプライベートなコピーを作成しません。

dwDynamicParamsDWORD4+12+12エフェクトの再生中に変更できるエフェクトのパラメーターを記述します。アプリケーションがエフェクトの再生中にパラメーターを変更しようとしたときに、ドライバーがそのエフェクトの動的な変更をサポートしていない場合、ドライバーは DIERR_EFFECTPLAYING を返します。このメンバーは dwStaticParams メンバーと同じフラグを使用しますが、フラグは、エフェクトが再生されていないときではなく再生中に、ドライバーがエフェクトのパラメーターを変更できるかどうかを表すものとして解釈されます。
dwCoordsDWORD4+16+16エフェクトがサポートする座標系を示す 1 つ以上の座標系フラグ (DIEFF_CARTESIANDIEFF_POLARDIEFF_SPHERICAL) です。少なくとも 1 つの座標系をサポートしていなければなりません。アプリケーションがサポートされていない座標系で方向を設定しようとした場合、DirectInput はそれをデバイスがサポートする座標系に自動的に変換します。

公式ドキュメント

DIEFFECTATTRIBUTES 構造体は、フォースフィードバックデバイスがサポートする各エフェクトについて、レジストリキーの "Attributes" 値に含まれる情報を記述します。

解説(Remarks)

DIEFFECT、DICONSTANTFORCE、DIRAMPFORCE、DIPERIODIC、DICONDITION、DICUSTOMFORCE、DIENVELOPE の各構造体については、DirectX SDK の DirectInput のセクションを参照してください。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 Structure
import 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: uint32
struct 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