ホーム › Devices.HumanInterfaceDevice › JOYREGHWCONFIG
JOYREGHWCONFIG
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| hws | JOYREGHWSETTINGS | 8 | +0 | +0 | ジョイスティックのハードウェア設定(JOYREGHWSETTINGS)。 |
| dwUsageSettings | DWORD | 4 | +8 | +8 | 使用方法の設定を示すフラグ群。 |
| hwv | JOYREGHWVALUES | 92 | +12 | +12 | ハードウェアのキャリブレーション値(JOYREGHWVALUES)。 |
| dwType | DWORD | 4 | +104 | +104 | ジョイスティックの種別を示す値。 |
| dwReserved | DWORD | 4 | +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 Structureimport 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: uint32struct 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