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

DIJOYSTATE2

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

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

フィールド

フィールドサイズx64x86説明
lXINT4+0+0X軸の位置。
lYINT4+4+4Y軸の位置。
lZINT4+8+8Z軸の位置。
lRxINT4+12+12X軸まわりの回転位置。
lRyINT4+16+16Y軸まわりの回転位置。
lRzINT4+20+20Z軸まわりの回転位置。
rglSliderINT8+24+242本のスライダー位置を保持する配列。
rgdwPOVDWORD16+32+324個のPOV方向を保持する配列。100分の1度単位、中立は-1。
rgbButtonsBYTE128+48+48128個のボタン状態を保持する配列。最上位ビットで押下を表す。
lVXINT4+176+176X軸の速度。
lVYINT4+180+180Y軸の速度。
lVZINT4+184+184Z軸の速度。
lVRxINT4+188+188X軸まわりの角速度。
lVRyINT4+192+192Y軸まわりの角速度。
lVRzINT4+196+196Z軸まわりの角速度。
rglVSliderINT8+200+2002本のスライダーの速度を保持する配列。
lAXINT4+208+208X軸の加速度。
lAYINT4+212+212Y軸の加速度。
lAZINT4+216+216Z軸の加速度。
lARxINT4+220+220X軸まわりの角加速度。
lARyINT4+224+224Y軸まわりの角加速度。
lARzINT4+228+228Z軸まわりの角加速度。
rglASliderINT8+232+2322本のスライダーの加速度を保持する配列。
lFXINT4+240+240X軸方向の力。
lFYINT4+244+244Y軸方向の力。
lFZINT4+248+248Z軸方向の力。
lFRxINT4+252+252X軸まわりのトルク。
lFRyINT4+256+256Y軸まわりのトルク。
lFRzINT4+260+260Z軸まわりのトルク。
rglFSliderINT8+264+2642本のスライダーに作用する力を保持する配列。

各言語での定義

#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 Structure
import 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