ホーム › Devices.HumanInterfaceDevice › DIJOYSTATE2
DIJOYSTATE2
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| lX | INT | 4 | +0 | +0 | X軸の位置。 |
| lY | INT | 4 | +4 | +4 | Y軸の位置。 |
| lZ | INT | 4 | +8 | +8 | Z軸の位置。 |
| lRx | INT | 4 | +12 | +12 | X軸まわりの回転位置。 |
| lRy | INT | 4 | +16 | +16 | Y軸まわりの回転位置。 |
| lRz | INT | 4 | +20 | +20 | Z軸まわりの回転位置。 |
| rglSlider | INT | 8 | +24 | +24 | 2本のスライダー位置を保持する配列。 |
| rgdwPOV | DWORD | 16 | +32 | +32 | 4個のPOV方向を保持する配列。100分の1度単位、中立は-1。 |
| rgbButtons | BYTE | 128 | +48 | +48 | 128個のボタン状態を保持する配列。最上位ビットで押下を表す。 |
| lVX | INT | 4 | +176 | +176 | X軸の速度。 |
| lVY | INT | 4 | +180 | +180 | Y軸の速度。 |
| lVZ | INT | 4 | +184 | +184 | Z軸の速度。 |
| lVRx | INT | 4 | +188 | +188 | X軸まわりの角速度。 |
| lVRy | INT | 4 | +192 | +192 | Y軸まわりの角速度。 |
| lVRz | INT | 4 | +196 | +196 | Z軸まわりの角速度。 |
| rglVSlider | INT | 8 | +200 | +200 | 2本のスライダーの速度を保持する配列。 |
| lAX | INT | 4 | +208 | +208 | X軸の加速度。 |
| lAY | INT | 4 | +212 | +212 | Y軸の加速度。 |
| lAZ | INT | 4 | +216 | +216 | Z軸の加速度。 |
| lARx | INT | 4 | +220 | +220 | X軸まわりの角加速度。 |
| lARy | INT | 4 | +224 | +224 | Y軸まわりの角加速度。 |
| lARz | INT | 4 | +228 | +228 | Z軸まわりの角加速度。 |
| rglASlider | INT | 8 | +232 | +232 | 2本のスライダーの加速度を保持する配列。 |
| lFX | INT | 4 | +240 | +240 | X軸方向の力。 |
| lFY | INT | 4 | +244 | +244 | Y軸方向の力。 |
| lFZ | INT | 4 | +248 | +248 | Z軸方向の力。 |
| lFRx | INT | 4 | +252 | +252 | X軸まわりのトルク。 |
| lFRy | INT | 4 | +256 | +256 | Y軸まわりのトルク。 |
| lFRz | INT | 4 | +260 | +260 | Z軸まわりのトルク。 |
| rglFSlider | INT | 8 | +264 | +264 | 2本のスライダーに作用する力を保持する配列。 |
各言語での定義
#include <windows.h>
// DIJOYSTATE2 (x64 272 / x86 272 バイト)
typedef struct DIJOYSTATE2 {
INT lX;
INT lY;
INT lZ;
INT lRx;
INT lRy;
INT lRz;
INT rglSlider[2];
DWORD rgdwPOV[4];
BYTE rgbButtons[128];
INT lVX;
INT lVY;
INT lVZ;
INT lVRx;
INT lVRy;
INT lVRz;
INT rglVSlider[2];
INT lAX;
INT lAY;
INT lAZ;
INT lARx;
INT lARy;
INT lARz;
INT rglASlider[2];
INT lFX;
INT lFY;
INT lFZ;
INT lFRx;
INT lFRy;
INT lFRz;
INT rglFSlider[2];
} DIJOYSTATE2;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DIJOYSTATE2
{
public int lX;
public int lY;
public int lZ;
public int lRx;
public int lRy;
public int lRz;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public int[] rglSlider;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)] public uint[] rgdwPOV;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)] public byte[] rgbButtons;
public int lVX;
public int lVY;
public int lVZ;
public int lVRx;
public int lVRy;
public int lVRz;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public int[] rglVSlider;
public int lAX;
public int lAY;
public int lAZ;
public int lARx;
public int lARy;
public int lARz;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public int[] rglASlider;
public int lFX;
public int lFY;
public int lFZ;
public int lFRx;
public int lFRy;
public int lFRz;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] public int[] rglFSlider;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DIJOYSTATE2
Public lX As Integer
Public lY As Integer
Public lZ As Integer
Public lRx As Integer
Public lRy As Integer
Public lRz As Integer
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> Public rglSlider() As Integer
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=4)> Public rgdwPOV() As UInteger
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=128)> Public rgbButtons() As Byte
Public lVX As Integer
Public lVY As Integer
Public lVZ As Integer
Public lVRx As Integer
Public lVRy As Integer
Public lVRz As Integer
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> Public rglVSlider() As Integer
Public lAX As Integer
Public lAY As Integer
Public lAZ As Integer
Public lARx As Integer
Public lARy As Integer
Public lARz As Integer
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> Public rglASlider() As Integer
Public lFX As Integer
Public lFY As Integer
Public lFZ As Integer
Public lFRx As Integer
Public lFRy As Integer
Public lFRz As Integer
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=2)> Public rglFSlider() As Integer
End Structureimport ctypes
from ctypes import wintypes
class DIJOYSTATE2(ctypes.Structure):
_fields_ = [
("lX", ctypes.c_int),
("lY", ctypes.c_int),
("lZ", ctypes.c_int),
("lRx", ctypes.c_int),
("lRy", ctypes.c_int),
("lRz", ctypes.c_int),
("rglSlider", ctypes.c_int * 2),
("rgdwPOV", wintypes.DWORD * 4),
("rgbButtons", ctypes.c_ubyte * 128),
("lVX", ctypes.c_int),
("lVY", ctypes.c_int),
("lVZ", ctypes.c_int),
("lVRx", ctypes.c_int),
("lVRy", ctypes.c_int),
("lVRz", ctypes.c_int),
("rglVSlider", ctypes.c_int * 2),
("lAX", ctypes.c_int),
("lAY", ctypes.c_int),
("lAZ", ctypes.c_int),
("lARx", ctypes.c_int),
("lARy", ctypes.c_int),
("lARz", ctypes.c_int),
("rglASlider", ctypes.c_int * 2),
("lFX", ctypes.c_int),
("lFY", ctypes.c_int),
("lFZ", ctypes.c_int),
("lFRx", ctypes.c_int),
("lFRy", ctypes.c_int),
("lFRz", ctypes.c_int),
("rglFSlider", ctypes.c_int * 2),
]#[repr(C)]
pub struct DIJOYSTATE2 {
pub lX: i32,
pub lY: i32,
pub lZ: i32,
pub lRx: i32,
pub lRy: i32,
pub lRz: i32,
pub rglSlider: [i32; 2],
pub rgdwPOV: [u32; 4],
pub rgbButtons: [u8; 128],
pub lVX: i32,
pub lVY: i32,
pub lVZ: i32,
pub lVRx: i32,
pub lVRy: i32,
pub lVRz: i32,
pub rglVSlider: [i32; 2],
pub lAX: i32,
pub lAY: i32,
pub lAZ: i32,
pub lARx: i32,
pub lARy: i32,
pub lARz: i32,
pub rglASlider: [i32; 2],
pub lFX: i32,
pub lFY: i32,
pub lFZ: i32,
pub lFRx: i32,
pub lFRy: i32,
pub lFRz: i32,
pub rglFSlider: [i32; 2],
}import "golang.org/x/sys/windows"
type DIJOYSTATE2 struct {
lX int32
lY int32
lZ int32
lRx int32
lRy int32
lRz int32
rglSlider [2]int32
rgdwPOV [4]uint32
rgbButtons [128]byte
lVX int32
lVY int32
lVZ int32
lVRx int32
lVRy int32
lVRz int32
rglVSlider [2]int32
lAX int32
lAY int32
lAZ int32
lARx int32
lARy int32
lARz int32
rglASlider [2]int32
lFX int32
lFY int32
lFZ int32
lFRx int32
lFRy int32
lFRz int32
rglFSlider [2]int32
}type
DIJOYSTATE2 = record
lX: Integer;
lY: Integer;
lZ: Integer;
lRx: Integer;
lRy: Integer;
lRz: Integer;
rglSlider: array[0..1] of Integer;
rgdwPOV: array[0..3] of DWORD;
rgbButtons: array[0..127] of Byte;
lVX: Integer;
lVY: Integer;
lVZ: Integer;
lVRx: Integer;
lVRy: Integer;
lVRz: Integer;
rglVSlider: array[0..1] of Integer;
lAX: Integer;
lAY: Integer;
lAZ: Integer;
lARx: Integer;
lARy: Integer;
lARz: Integer;
rglASlider: array[0..1] of Integer;
lFX: Integer;
lFY: Integer;
lFZ: Integer;
lFRx: Integer;
lFRy: Integer;
lFRz: Integer;
rglFSlider: array[0..1] of Integer;
end;const DIJOYSTATE2 = extern struct {
lX: i32,
lY: i32,
lZ: i32,
lRx: i32,
lRy: i32,
lRz: i32,
rglSlider: [2]i32,
rgdwPOV: [4]u32,
rgbButtons: [128]u8,
lVX: i32,
lVY: i32,
lVZ: i32,
lVRx: i32,
lVRy: i32,
lVRz: i32,
rglVSlider: [2]i32,
lAX: i32,
lAY: i32,
lAZ: i32,
lARx: i32,
lARy: i32,
lARz: i32,
rglASlider: [2]i32,
lFX: i32,
lFY: i32,
lFZ: i32,
lFRx: i32,
lFRy: i32,
lFRz: i32,
rglFSlider: [2]i32,
};type
DIJOYSTATE2 {.bycopy.} = object
lX: int32
lY: int32
lZ: int32
lRx: int32
lRy: int32
lRz: int32
rglSlider: array[2, int32]
rgdwPOV: array[4, uint32]
rgbButtons: array[128, uint8]
lVX: int32
lVY: int32
lVZ: int32
lVRx: int32
lVRy: int32
lVRz: int32
rglVSlider: array[2, int32]
lAX: int32
lAY: int32
lAZ: int32
lARx: int32
lARy: int32
lARz: int32
rglASlider: array[2, int32]
lFX: int32
lFY: int32
lFZ: int32
lFRx: int32
lFRy: int32
lFRz: int32
rglFSlider: array[2, int32]struct DIJOYSTATE2
{
int lX;
int lY;
int lZ;
int lRx;
int lRy;
int lRz;
int[2] rglSlider;
uint[4] rgdwPOV;
ubyte[128] rgbButtons;
int lVX;
int lVY;
int lVZ;
int lVRx;
int lVRy;
int lVRz;
int[2] rglVSlider;
int lAX;
int lAY;
int lAZ;
int lARx;
int lARy;
int lARz;
int[2] rglASlider;
int lFX;
int lFY;
int lFZ;
int lFRx;
int lFRy;
int lFRz;
int[2] rglFSlider;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DIJOYSTATE2 サイズ: 272 バイト(x64)
dim st, 68 ; 4byte整数×68(構造体サイズ 272 / 4 切り上げ)
; lX : INT (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; lY : INT (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; lZ : INT (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; lRx : INT (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; lRy : INT (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; lRz : INT (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; rglSlider : INT (+24, 8byte) varptr(st)+24 を基点に操作(8byte:入れ子/配列)
; rgdwPOV : DWORD (+32, 16byte) varptr(st)+32 を基点に操作(16byte:入れ子/配列)
; rgbButtons : BYTE (+48, 128byte) varptr(st)+48 を基点に操作(128byte:入れ子/配列)
; lVX : INT (+176, 4byte) st.44 = 値 / 値 = st.44 (lpoke/lpeek も可)
; lVY : INT (+180, 4byte) st.45 = 値 / 値 = st.45 (lpoke/lpeek も可)
; lVZ : INT (+184, 4byte) st.46 = 値 / 値 = st.46 (lpoke/lpeek も可)
; lVRx : INT (+188, 4byte) st.47 = 値 / 値 = st.47 (lpoke/lpeek も可)
; lVRy : INT (+192, 4byte) st.48 = 値 / 値 = st.48 (lpoke/lpeek も可)
; lVRz : INT (+196, 4byte) st.49 = 値 / 値 = st.49 (lpoke/lpeek も可)
; rglVSlider : INT (+200, 8byte) varptr(st)+200 を基点に操作(8byte:入れ子/配列)
; lAX : INT (+208, 4byte) st.52 = 値 / 値 = st.52 (lpoke/lpeek も可)
; lAY : INT (+212, 4byte) st.53 = 値 / 値 = st.53 (lpoke/lpeek も可)
; lAZ : INT (+216, 4byte) st.54 = 値 / 値 = st.54 (lpoke/lpeek も可)
; lARx : INT (+220, 4byte) st.55 = 値 / 値 = st.55 (lpoke/lpeek も可)
; lARy : INT (+224, 4byte) st.56 = 値 / 値 = st.56 (lpoke/lpeek も可)
; lARz : INT (+228, 4byte) st.57 = 値 / 値 = st.57 (lpoke/lpeek も可)
; rglASlider : INT (+232, 8byte) varptr(st)+232 を基点に操作(8byte:入れ子/配列)
; lFX : INT (+240, 4byte) st.60 = 値 / 値 = st.60 (lpoke/lpeek も可)
; lFY : INT (+244, 4byte) st.61 = 値 / 値 = st.61 (lpoke/lpeek も可)
; lFZ : INT (+248, 4byte) st.62 = 値 / 値 = st.62 (lpoke/lpeek も可)
; lFRx : INT (+252, 4byte) st.63 = 値 / 値 = st.63 (lpoke/lpeek も可)
; lFRy : INT (+256, 4byte) st.64 = 値 / 値 = st.64 (lpoke/lpeek も可)
; lFRz : INT (+260, 4byte) st.65 = 値 / 値 = st.65 (lpoke/lpeek も可)
; rglFSlider : INT (+264, 8byte) varptr(st)+264 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global DIJOYSTATE2
#field int lX
#field int lY
#field int lZ
#field int lRx
#field int lRy
#field int lRz
#field int rglSlider 2
#field int rgdwPOV 4
#field byte rgbButtons 128
#field int lVX
#field int lVY
#field int lVZ
#field int lVRx
#field int lVRy
#field int lVRz
#field int rglVSlider 2
#field int lAX
#field int lAY
#field int lAZ
#field int lARx
#field int lARy
#field int lARz
#field int rglASlider 2
#field int lFX
#field int lFY
#field int lFZ
#field int lFRx
#field int lFRy
#field int lFRz
#field int rglFSlider 2
#endstruct
stdim st, DIJOYSTATE2 ; NSTRUCT 変数を確保
st->lX = 100
mes "lX=" + st->lX