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

DIJOYTYPEINFO

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

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

フィールド

フィールドサイズx64x86説明
dwSizeDWORD4+0+0構造体のサイズをバイト単位で指定します。このメンバーは、構造体を使用する前に初期化しておく必要があります。
hwsJOYREGHWSETTINGS8+4+4ジョイスティックのハードウェア設定です。
clsidConfigGUID16+12+12ジョイスティックの種類の構成オブジェクトの CLSID を指定します。この CLSID を CoCreateInstance に渡して構成オブジェクトを作成します。この種類がカスタム構成を持たない場合、このフィールドは 0 になります。
wszDisplayNameWCHAR512+28+28ジョイスティックの種類の表示名です。表示名は、ジョイスティックの種類の名前をエンドユーザーに表示するために使用される名前です。
wszCalloutWCHAR520+540+540この種類のデバイスのポーリング処理を担当するデバイスです。グローバルなポーリングコールアウトを使用する場合は、null 文字列になります。
wszHardwareIdWCHAR512+1060+1060ジョイスティックの種類のハードウェア ID です。ハードウェア ID は、Windows 2000 および Windows 98 (DirectX 7.0 のみ) のプラグアンドプレイが、ジョイスティックのドライバーを検索するために使用します。
dwFlags1DWORD4+1572+1572

ジョイスティックの種類のフラグです。このメンバーには、次のフラグの組み合わせを設定できます。

JOYTYPE_ZEROGAMEENUMOEMDATA

GameEnum の OEM データフィールドを 0 にします。

JOYTYPE_NOAUTODETECTGAMEPORT

デバイスはゲームポートの自動検出をサポートしません。

JOYTYPE_NOHIDDIRECT

このデバイスに対して HID を直接使用しません。(Windows 98 のみ。)

JOYTYPE_DEFAULTPROPSHEET

CPL がカスタムプロパティシートをオーバーライドします。

dwFlags2DWORD4+1576+1576

デバイスのフィルタリングフラグと、デバイスの種類およびサブタイプのオーバーライドフラグの組み合わせです。デバイスのフィルタリングフラグは dwFlags2 の上位 WORD に配置します。デバイスの種類とサブタイプは、それぞれこのメンバーの下位 WORD と上位 WORD に配置します。

デバイスのフィルタリングフラグ

分類されていないデバイスを非表示にします。

JOYTYPE_MOUSEHIDE

マウスを非表示にします。

JOYTYPE_KEYBHIDE

キーボードを非表示にします。

JOYTYPE_GAMEHIDE

ゲームコントローラーを非表示にします。

JOYTYPE_HIDEACTIVE

非表示フラグが有効です。他の非表示フラグを指定する場合は、このフラグを必ず含めなければなりません。

デバイスの種類とサブタイプのオーバーライドフラグ

デバイスの種類 デバイスのサブタイプ
DI8DEVTYPE_1STPERSON DI8DEVTYPE1STPERSON_LIMITED
DI8DEVTYPE1STPERSON_UNKNOWN
DI8DEVTYPE1STPERSON_SIXDOF
DI8DEVTYPE1STPERSON_SHOOTER
DI8DEVTYPE_DEVICE 該当なし
DI8DEVTYPE_DEVICECTRL DI8DEVTYPEDEVICECTRL_UNKNOWN
DI8DEVTYPEDEVICECTRL_COMMSSELECTION
DI8DEVTYPEDEVICECTRL_COMMSSELECTION_HARDWIRED
DI8DEVTYPE_DRIVING DI8DEVTYPEDRIVING_LIMITED
DI8DEVTYPEDRIVING_COMBINEDPEDALS
DI8DEVTYPEDRIVING_DUALPEDALS
DI8DEVTYPEDRIVING_THREEPEDALS
DI8DEVTYPEDRIVING_HANDHELD
DI8DEVTYPE_FLIGHT DI8DEVTYPEFLIGHT_LIMITED
DI8DEVTYPEFLIGHT_STICK
DI8DEVTYPEFLIGHT_YOKE
DI8DEVTYPEFLIGHT_RC
DI8DEVTYPE_GAMEPAD DI8DEVTYPEGAMEPAD_LIMITED
DI8DEVTYPEGAMEPAD_STANDARD
DI8DEVTYPEGAMEPAD_TILT
DI8DEVTYPE_JOYSTICK DI8DEVTYPEJOYSTICK_LIMITED
DI8DEVTYPEJOYSTICK_STANDARD
DI8DEVTYPEJOYSTICK_ENHANCED
DI8DEVTYPE_KEYBOARD DI8DEVTYPEKEYBOARD_UNKNOWN
DI8DEVTYPEKEYBOARD_PCXT
DI8DEVTYPEKEYBOARD_OLIVETTI
DI8DEVTYPEKEYBOARD_PCAT
DI8DEVTYPEKEYBOARD_PCENH
DI8DEVTYPEKEYBOARD_NOKIA1050
DI8DEVTYPEKEYBOARD_NOKIA9140
DI8DEVTYPEKEYBOARD_NEC98
DI8DEVTYPEKEYBOARD_NEC98LAPTOP
DI8DEVTYPEKEYBOARD_NEC98106
DI8DEVTYPEKEYBOARD_JAPAN106
DI8DEVTYPEKEYBOARD_JAPANAX
DI8DEVTYPEKEYBOARD_J3100
DI8DEVTYPE_MOUSE DI8DEVTYPEMOUSE_UNKNOWN
DI8DEVTYPEMOUSE_TRADITIONAL
DI8DEVTYPEMOUSE_FINGERSTICK
DI8DEVTYPEMOUSE_TOUCHPAD
DI8DEVTYPEMOUSE_TRACKBALL
DI8DEVTYPEMOUSE_ABSOLUTE
DI8DEVTYPE_REMOTE DI8DEVTYPEREMOTE_UNKNOWN
DI8DEVTYPE_SCREENPOINTER DI8DEVTYPESCREENPTR_UNKNOWN
DI8DEVTYPESCREENPTR_LIGHTGUN
DI8DEVTYPESCREENPTR_LIGHTPEN
DI8DEVTYPESCREENPTR_TOUCH
DI8DEVTYPE_SUPPLEMENTAL DI8DEVTYPESUPPLEMENTAL_UNKNOWN
DI8DEVTYPESUPPLEMENTAL_2NDHANDCONTROLLER
DI8DEVTYPESUPPLEMENTAL_HEADTRACKER
DI8DEVTYPESUPPLEMENTAL_HANDTRACKER
DI8DEVTYPESUPPLEMENTAL_SHIFTSTICKGATE
DI8DEVTYPESUPPLEMENTAL_SHIFTER
DI8DEVTYPESUPPLEMENTAL_THROTTLE
DI8DEVTYPESUPPLEMENTAL_SPLITTHROTTLE
DI8DEVTYPESUPPLEMENTAL_COMBINEDPEDALS
DI8DEVTYPESUPPLEMENTAL_DUALPEDALS
DI8DEVTYPESUPPLEMENTAL_THREEPEDALS
DI8DEVTYPESUPPLEMENTAL_RUDDERPEDALS
wszMapFileWCHAR512+1580+1580アクションマッピングファイルのパスを示すワイド文字列。

公式ドキュメント

DIJOYTYPEINFO 構造体は、ジョイスティックの種類に関する情報を格納します。

解説(Remarks)

「ジョイスティックの種類」は、DirectInput がデバイスとどのように通信し、デバイスのデータをどのように報告すべきかを表します。たとえば、「Frobozz Industries SuperStick 5X は 3 軸 5 ボタンのジョイスティックであり、3 番目の軸は 2 番目のポートの最初のビットとして報告される」といったものです。

DirectInput には次の定義済みのジョイスティックの種類が用意されており、いずれも軸は既定の位置にあります。

ジョイスティックの種類が JOYHWSETTINGS 構造体の dwFlags メンバーに JOY_HWS_ISGAMEPORTDRIVER フラグを設定している場合、DIJOYTYPEINFO 構造体の wszCallout メンバーには、グローバルドライバーとして使用できるドライバーの名前が格納されます。このジョイスティックの種類は、グローバルドライバーの一覧に表示し、割り当て可能なジョイスティックの種類の一覧には表示しないでください。

DirectX 8.0 の新機能

dwFlags2 メンバーは DIJOYCONFIG 構造体に追加されました。このメンバーは、DirectInput がアプリケーションに対してデバイスを列挙する方法を制御する情報を保持します。dwFlags2 メンバーは、下位ワードにデバイスの種類とサブタイプのオーバーライドフラグを、上位ワードにデバイス列挙の「非表示」フラグを保持します。デバイスの種類とサブタイプのオーバーライドフラグは、DirectInput を使用するアプリケーションに対してデバイスをどのように見せるかを制御します。これらは、デバイスの列挙時にアプリケーションが DirectInput から受け取るフラグと同じものです。たとえば、デバイスがファームウェアでテレフォニーデバイスとして記述されている場合、テレフォニーデバイスはゲームに関連しないと見なされるため、通常はゲームに対して列挙されません。しかし、DI8DEVTYPE_DEVICECTRL と DI8DEVTYPEDEVICECONTROL_COMMSSELECTION を使用してこのデバイスを記述した場合、DirectInput はファームウェアから取得したデータをオーバーライドし、ゲームに対してデバイスを列挙します。

dwFlags2 の上位ワードには、DirectInput アプリケーションに対してデバイスを列挙する範囲を限定するフラグを設定できます。たとえば、複数のトップレベル HID コレクションを宣言するデバイスがあります。そのようなデバイスは、キーボード、マウス、ジョイスティックのすべてとして動作できると宣言する場合があります。一般に、これらのトップレベルコレクションの 1 つ以上は単なるファントムデバイスであり、ゲームに対して列挙すべきではありません。このデバイスの場合、dwFlags2 の上位ワードには JOYTYPE_HIDEACTIVEJOYTYPE_MOUSEHIDEJOYTYPE_KEYBHIDE の各フラグの組み合わせを設定できます。JOYTYPE_HIDEACTIVE フラグは、DirectInput がデバイスをそのすべての種類で列挙すべきではないことを示します。上位ワードに併せて指定された JOYTYPE_MOUSEHIDE および JOYTYPE_KEYBHIDE フラグは、そのデバイス上のファントムのマウスとキーボードの列挙を抑制するよう DirectInput に指示します。なお、アプリケーションは DIEDFL_INCLUDEHIDDEN フラグ (Microsoft Windows SDK のドキュメントで説明されています) を含めることで、非表示のデバイスも列挙できます。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#include <windows.h>

// JOYREGHWSETTINGS  (x64 8 / x86 8 バイト)
typedef struct JOYREGHWSETTINGS {
    DWORD dwFlags;
    DWORD dwNumButtons;
} JOYREGHWSETTINGS;

// DIJOYTYPEINFO  (x64 2092 / x86 2092 バイト)
typedef struct DIJOYTYPEINFO {
    DWORD dwSize;
    JOYREGHWSETTINGS hws;
    GUID clsidConfig;
    WCHAR wszDisplayName[256];
    WCHAR wszCallout[260];
    WCHAR wszHardwareId[256];
    DWORD dwFlags1;
    DWORD dwFlags2;
    WCHAR wszMapFile[256];
} DIJOYTYPEINFO;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct JOYREGHWSETTINGS
{
    public uint dwFlags;
    public uint dwNumButtons;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DIJOYTYPEINFO
{
    public uint dwSize;
    public JOYREGHWSETTINGS hws;
    public Guid clsidConfig;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] public string wszDisplayName;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] public string wszCallout;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] public string wszHardwareId;
    public uint dwFlags1;
    public uint dwFlags2;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)] public string wszMapFile;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure JOYREGHWSETTINGS
    Public dwFlags As UInteger
    Public dwNumButtons As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DIJOYTYPEINFO
    Public dwSize As UInteger
    Public hws As JOYREGHWSETTINGS
    Public clsidConfig As Guid
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256)> Public wszDisplayName As String
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=260)> Public wszCallout As String
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256)> Public wszHardwareId As String
    Public dwFlags1 As UInteger
    Public dwFlags2 As UInteger
    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=256)> Public wszMapFile As String
End Structure
import ctypes
from ctypes import wintypes

class JOYREGHWSETTINGS(ctypes.Structure):
    _fields_ = [
        ("dwFlags", wintypes.DWORD),
        ("dwNumButtons", wintypes.DWORD),
    ]

class DIJOYTYPEINFO(ctypes.Structure):
    _fields_ = [
        ("dwSize", wintypes.DWORD),
        ("hws", JOYREGHWSETTINGS),
        ("clsidConfig", GUID),
        ("wszDisplayName", ctypes.c_wchar * 256),
        ("wszCallout", ctypes.c_wchar * 260),
        ("wszHardwareId", ctypes.c_wchar * 256),
        ("dwFlags1", wintypes.DWORD),
        ("dwFlags2", wintypes.DWORD),
        ("wszMapFile", ctypes.c_wchar * 256),
    ]
#[repr(C)]
pub struct JOYREGHWSETTINGS {
    pub dwFlags: u32,
    pub dwNumButtons: u32,
}

#[repr(C)]
pub struct DIJOYTYPEINFO {
    pub dwSize: u32,
    pub hws: JOYREGHWSETTINGS,
    pub clsidConfig: GUID,
    pub wszDisplayName: [u16; 256],
    pub wszCallout: [u16; 260],
    pub wszHardwareId: [u16; 256],
    pub dwFlags1: u32,
    pub dwFlags2: u32,
    pub wszMapFile: [u16; 256],
}
import "golang.org/x/sys/windows"

type JOYREGHWSETTINGS struct {
	dwFlags uint32
	dwNumButtons uint32
}

type DIJOYTYPEINFO struct {
	dwSize uint32
	hws JOYREGHWSETTINGS
	clsidConfig windows.GUID
	wszDisplayName [256]uint16
	wszCallout [260]uint16
	wszHardwareId [256]uint16
	dwFlags1 uint32
	dwFlags2 uint32
	wszMapFile [256]uint16
}
type
  JOYREGHWSETTINGS = record
    dwFlags: DWORD;
    dwNumButtons: DWORD;
  end;

  DIJOYTYPEINFO = record
    dwSize: DWORD;
    hws: JOYREGHWSETTINGS;
    clsidConfig: TGUID;
    wszDisplayName: array[0..255] of WideChar;
    wszCallout: array[0..259] of WideChar;
    wszHardwareId: array[0..255] of WideChar;
    dwFlags1: DWORD;
    dwFlags2: DWORD;
    wszMapFile: array[0..255] of WideChar;
  end;
const JOYREGHWSETTINGS = extern struct {
    dwFlags: u32,
    dwNumButtons: u32,
};

const DIJOYTYPEINFO = extern struct {
    dwSize: u32,
    hws: JOYREGHWSETTINGS,
    clsidConfig: GUID,
    wszDisplayName: [256]u16,
    wszCallout: [260]u16,
    wszHardwareId: [256]u16,
    dwFlags1: u32,
    dwFlags2: u32,
    wszMapFile: [256]u16,
};
type
  JOYREGHWSETTINGS {.bycopy.} = object
    dwFlags: uint32
    dwNumButtons: uint32

  DIJOYTYPEINFO {.bycopy.} = object
    dwSize: uint32
    hws: JOYREGHWSETTINGS
    clsidConfig: GUID
    wszDisplayName: array[256, uint16]
    wszCallout: array[260, uint16]
    wszHardwareId: array[256, uint16]
    dwFlags1: uint32
    dwFlags2: uint32
    wszMapFile: array[256, uint16]
struct JOYREGHWSETTINGS
{
    uint dwFlags;
    uint dwNumButtons;
}

struct DIJOYTYPEINFO
{
    uint dwSize;
    JOYREGHWSETTINGS hws;
    GUID clsidConfig;
    wchar[256] wszDisplayName;
    wchar[260] wszCallout;
    wchar[256] wszHardwareId;
    uint dwFlags1;
    uint dwFlags2;
    wchar[256] wszMapFile;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DIJOYTYPEINFO サイズ: 2092 バイト(x64)
dim st, 523    ; 4byte整数×523(構造体サイズ 2092 / 4 切り上げ)
; dwSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; hws : JOYREGHWSETTINGS (+4, 8byte)  varptr(st)+4 を基点に操作(8byte:入れ子/配列)
; clsidConfig : GUID (+12, 16byte)  varptr(st)+12 を基点に操作(16byte:入れ子/配列)
; wszDisplayName : WCHAR (+28, 512byte)  varptr(st)+28 を基点に操作(512byte:入れ子/配列)
; wszCallout : WCHAR (+540, 520byte)  varptr(st)+540 を基点に操作(520byte:入れ子/配列)
; wszHardwareId : WCHAR (+1060, 512byte)  varptr(st)+1060 を基点に操作(512byte:入れ子/配列)
; dwFlags1 : DWORD (+1572, 4byte)  st.393 = 値  /  値 = st.393   (lpoke/lpeek も可)
; dwFlags2 : DWORD (+1576, 4byte)  st.394 = 値  /  値 = st.394   (lpoke/lpeek も可)
; wszMapFile : WCHAR (+1580, 512byte)  varptr(st)+1580 を基点に操作(512byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global JOYREGHWSETTINGS
    #field int dwFlags
    #field int dwNumButtons
#endstruct

#defstruct global GUID, pack=1
    #field int Data1
    #field short Data2
    #field short Data3
    #field byte Data4 8
#endstruct

#defstruct global DIJOYTYPEINFO
    #field int dwSize
    #field JOYREGHWSETTINGS hws
    #field GUID clsidConfig
    #field wchar wszDisplayName 256
    #field wchar wszCallout 260
    #field wchar wszHardwareId 256
    #field int dwFlags1
    #field int dwFlags2
    #field wchar wszMapFile 256
#endstruct

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