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

JOYREGHWCONFIG

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

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

フィールド

フィールドサイズx64x86説明
hwsJOYREGHWSETTINGS8+0+0ジョイスティックのハードウェア設定(JOYREGHWSETTINGS)。
dwUsageSettingsDWORD4+8+8使用方法の設定を示すフラグ群。
hwvJOYREGHWVALUES92+12+12ハードウェアのキャリブレーション値(JOYREGHWVALUES)。
dwTypeDWORD4+104+104ジョイスティックの種別を示す値。
dwReservedDWORD4+108+108予約フィールド。使用しない。

各言語での定義

#include <windows.h>

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

// JOYPOS  (x64 24 / x86 24 バイト)
typedef struct JOYPOS {
    DWORD dwX;
    DWORD dwY;
    DWORD dwZ;
    DWORD dwR;
    DWORD dwU;
    DWORD dwV;
} JOYPOS;

// JOYRANGE  (x64 72 / x86 72 バイト)
typedef struct JOYRANGE {
    JOYPOS jpMin;
    JOYPOS jpMax;
    JOYPOS jpCenter;
} JOYRANGE;

// JOYREGHWVALUES  (x64 92 / x86 92 バイト)
typedef struct JOYREGHWVALUES {
    JOYRANGE jrvHardware;
    DWORD dwPOVValues[4];
    DWORD dwCalFlags;
} JOYREGHWVALUES;

// JOYREGHWCONFIG  (x64 112 / x86 112 バイト)
typedef struct JOYREGHWCONFIG {
    JOYREGHWSETTINGS hws;
    DWORD dwUsageSettings;
    JOYREGHWVALUES hwv;
    DWORD dwType;
    DWORD dwReserved;
} JOYREGHWCONFIG;
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 JOYPOS
{
    public uint dwX;
    public uint dwY;
    public uint dwZ;
    public uint dwR;
    public uint dwU;
    public uint dwV;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct JOYRANGE
{
    public JOYPOS jpMin;
    public JOYPOS jpMax;
    public JOYPOS jpCenter;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct JOYREGHWVALUES
{
    public JOYRANGE jrvHardware;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public uint[] dwPOVValues;
    public uint dwCalFlags;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct JOYREGHWCONFIG
{
    public JOYREGHWSETTINGS hws;
    public uint dwUsageSettings;
    public JOYREGHWVALUES hwv;
    public uint dwType;
    public uint dwReserved;
}
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 JOYPOS
    Public dwX As UInteger
    Public dwY As UInteger
    Public dwZ As UInteger
    Public dwR As UInteger
    Public dwU As UInteger
    Public dwV As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure JOYRANGE
    Public jpMin As JOYPOS
    Public jpMax As JOYPOS
    Public jpCenter As JOYPOS
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure JOYREGHWVALUES
    Public jrvHardware As JOYRANGE
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> Public dwPOVValues() As UInteger
    Public dwCalFlags As UInteger
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure JOYREGHWCONFIG
    Public hws As JOYREGHWSETTINGS
    Public dwUsageSettings As UInteger
    Public hwv As JOYREGHWVALUES
    Public dwType As UInteger
    Public dwReserved As UInteger
End Structure
import ctypes
from ctypes import wintypes

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

class JOYPOS(ctypes.Structure):
    _fields_ = [
        ("dwX", wintypes.DWORD),
        ("dwY", wintypes.DWORD),
        ("dwZ", wintypes.DWORD),
        ("dwR", wintypes.DWORD),
        ("dwU", wintypes.DWORD),
        ("dwV", wintypes.DWORD),
    ]

class JOYRANGE(ctypes.Structure):
    _fields_ = [
        ("jpMin", JOYPOS),
        ("jpMax", JOYPOS),
        ("jpCenter", JOYPOS),
    ]

class JOYREGHWVALUES(ctypes.Structure):
    _fields_ = [
        ("jrvHardware", JOYRANGE),
        ("dwPOVValues", wintypes.DWORD * 4),
        ("dwCalFlags", wintypes.DWORD),
    ]

class JOYREGHWCONFIG(ctypes.Structure):
    _fields_ = [
        ("hws", JOYREGHWSETTINGS),
        ("dwUsageSettings", wintypes.DWORD),
        ("hwv", JOYREGHWVALUES),
        ("dwType", wintypes.DWORD),
        ("dwReserved", wintypes.DWORD),
    ]
#[repr(C)]
pub struct JOYREGHWSETTINGS {
    pub dwFlags: u32,
    pub dwNumButtons: u32,
}

#[repr(C)]
pub struct JOYPOS {
    pub dwX: u32,
    pub dwY: u32,
    pub dwZ: u32,
    pub dwR: u32,
    pub dwU: u32,
    pub dwV: u32,
}

#[repr(C)]
pub struct JOYRANGE {
    pub jpMin: JOYPOS,
    pub jpMax: JOYPOS,
    pub jpCenter: JOYPOS,
}

#[repr(C)]
pub struct JOYREGHWVALUES {
    pub jrvHardware: JOYRANGE,
    pub dwPOVValues: [u32; 4],
    pub dwCalFlags: u32,
}

#[repr(C)]
pub struct JOYREGHWCONFIG {
    pub hws: JOYREGHWSETTINGS,
    pub dwUsageSettings: u32,
    pub hwv: JOYREGHWVALUES,
    pub dwType: u32,
    pub dwReserved: u32,
}
import "golang.org/x/sys/windows"

type JOYREGHWSETTINGS struct {
	dwFlags uint32
	dwNumButtons uint32
}

type JOYPOS struct {
	dwX uint32
	dwY uint32
	dwZ uint32
	dwR uint32
	dwU uint32
	dwV uint32
}

type JOYRANGE struct {
	jpMin JOYPOS
	jpMax JOYPOS
	jpCenter JOYPOS
}

type JOYREGHWVALUES struct {
	jrvHardware JOYRANGE
	dwPOVValues [4]uint32
	dwCalFlags uint32
}

type JOYREGHWCONFIG struct {
	hws JOYREGHWSETTINGS
	dwUsageSettings uint32
	hwv JOYREGHWVALUES
	dwType uint32
	dwReserved uint32
}
type
  JOYREGHWSETTINGS = record
    dwFlags: DWORD;
    dwNumButtons: DWORD;
  end;

  JOYPOS = record
    dwX: DWORD;
    dwY: DWORD;
    dwZ: DWORD;
    dwR: DWORD;
    dwU: DWORD;
    dwV: DWORD;
  end;

  JOYRANGE = record
    jpMin: JOYPOS;
    jpMax: JOYPOS;
    jpCenter: JOYPOS;
  end;

  JOYREGHWVALUES = record
    jrvHardware: JOYRANGE;
    dwPOVValues: array[0..3] of DWORD;
    dwCalFlags: DWORD;
  end;

  JOYREGHWCONFIG = record
    hws: JOYREGHWSETTINGS;
    dwUsageSettings: DWORD;
    hwv: JOYREGHWVALUES;
    dwType: DWORD;
    dwReserved: DWORD;
  end;
const JOYREGHWSETTINGS = extern struct {
    dwFlags: u32,
    dwNumButtons: u32,
};

const JOYPOS = extern struct {
    dwX: u32,
    dwY: u32,
    dwZ: u32,
    dwR: u32,
    dwU: u32,
    dwV: u32,
};

const JOYRANGE = extern struct {
    jpMin: JOYPOS,
    jpMax: JOYPOS,
    jpCenter: JOYPOS,
};

const JOYREGHWVALUES = extern struct {
    jrvHardware: JOYRANGE,
    dwPOVValues: [4]u32,
    dwCalFlags: u32,
};

const JOYREGHWCONFIG = extern struct {
    hws: JOYREGHWSETTINGS,
    dwUsageSettings: u32,
    hwv: JOYREGHWVALUES,
    dwType: u32,
    dwReserved: u32,
};
type
  JOYREGHWSETTINGS {.bycopy.} = object
    dwFlags: uint32
    dwNumButtons: uint32

  JOYPOS {.bycopy.} = object
    dwX: uint32
    dwY: uint32
    dwZ: uint32
    dwR: uint32
    dwU: uint32
    dwV: uint32

  JOYRANGE {.bycopy.} = object
    jpMin: JOYPOS
    jpMax: JOYPOS
    jpCenter: JOYPOS

  JOYREGHWVALUES {.bycopy.} = object
    jrvHardware: JOYRANGE
    dwPOVValues: array[4, uint32]
    dwCalFlags: uint32

  JOYREGHWCONFIG {.bycopy.} = object
    hws: JOYREGHWSETTINGS
    dwUsageSettings: uint32
    hwv: JOYREGHWVALUES
    dwType: uint32
    dwReserved: uint32
struct JOYREGHWSETTINGS
{
    uint dwFlags;
    uint dwNumButtons;
}

struct JOYPOS
{
    uint dwX;
    uint dwY;
    uint dwZ;
    uint dwR;
    uint dwU;
    uint dwV;
}

struct JOYRANGE
{
    JOYPOS jpMin;
    JOYPOS jpMax;
    JOYPOS jpCenter;
}

struct JOYREGHWVALUES
{
    JOYRANGE jrvHardware;
    uint[4] dwPOVValues;
    uint dwCalFlags;
}

struct JOYREGHWCONFIG
{
    JOYREGHWSETTINGS hws;
    uint dwUsageSettings;
    JOYREGHWVALUES hwv;
    uint dwType;
    uint dwReserved;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; JOYREGHWCONFIG サイズ: 112 バイト(x64)
dim st, 28    ; 4byte整数×28(構造体サイズ 112 / 4 切り上げ)
; hws : JOYREGHWSETTINGS (+0, 8byte)  varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; dwUsageSettings : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; hwv : JOYREGHWVALUES (+12, 92byte)  varptr(st)+12 を基点に操作(92byte:入れ子/配列)
; dwType : DWORD (+104, 4byte)  st.26 = 値  /  値 = st.26   (lpoke/lpeek も可)
; dwReserved : DWORD (+108, 4byte)  st.27 = 値  /  値 = st.27   (lpoke/lpeek も可)
; ※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 JOYPOS
    #field int dwX
    #field int dwY
    #field int dwZ
    #field int dwR
    #field int dwU
    #field int dwV
#endstruct

#defstruct global JOYRANGE
    #field JOYPOS jpMin
    #field JOYPOS jpMax
    #field JOYPOS jpCenter
#endstruct

#defstruct global JOYREGHWVALUES
    #field JOYRANGE jrvHardware
    #field int dwPOVValues 4
    #field int dwCalFlags
#endstruct

#defstruct global JOYREGHWCONFIG
    #field JOYREGHWSETTINGS hws
    #field int dwUsageSettings
    #field JOYREGHWVALUES hwv
    #field int dwType
    #field int dwReserved
#endstruct

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