Win32 API 日本語リファレンス
ホームMedia.Multimedia › JOYINFOEX

JOYINFOEX

構造体
サイズx64: 52 バイト / x86: 52 バイトパッキング1

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

フィールド

フィールドサイズx64x86説明
dwSizeDWORD4+0+0この構造体のサイズ (バイト単位)。
dwFlagsDWORD4+4+4

この構造体で返される有効な情報を示すフラグです。有効な情報が含まれないメンバーは 0 に設定されます。次のフラグが定義されています。

フラグ 説明
JOY_RETURNALL JOY_RETURNRAWDATA を除くすべての JOY_RETURN ビットを設定するのと同等です。
JOY_RETURNBUTTONS dwButtons メンバーに、各ジョイスティック ボタンの状態に関する有効な情報が格納されます。
JOY_RETURNCENTERED ジョイスティックのニュートラル位置を、各移動軸の中央の値に設定します。
JOY_RETURNPOV dwPOV メンバーに、離散的な単位で表された視点コントロールに関する有効な情報が格納されます。
JOY_RETURNPOVCTS dwPOV メンバーに、連続的な 100 分の 1 度単位で表された視点コントロールに関する有効な情報が格納されます。
JOY_RETURNR dwRpos メンバーに、有効なラダー ペダルのデータが格納されます。この情報はもう 1 つの軸 (4 番目の軸) を表します。
JOY_RETURNRAWDATA この構造体に格納されるデータは、未校正のジョイスティック読み取り値です。
JOY_RETURNU dwUpos メンバーに、ジョイスティックの 5 番目の軸が使用可能な場合はその有効なデータが格納され、それ以外の場合は 0 が返されます。
JOY_RETURNV dwVpos メンバーに、ジョイスティックの 6 番目の軸が使用可能な場合はその有効なデータが格納され、それ以外の場合は 0 が返されます。
JOY_RETURNX dwXpos メンバーに、ジョイスティックの x 座標の有効なデータが格納されます。
JOY_RETURNY dwYpos メンバーに、ジョイスティックの y 座標の有効なデータが格納されます。
JOY_RETURNZ dwZpos メンバーに、ジョイスティックの z 座標の有効なデータが格納されます。

次のフラグは、ジョイスティックを校正するためのデータを提供するもので、カスタム校正アプリケーション向けです。

フラグ 説明
JOY_CAL_READ3 x、y、z の各座標を読み取り、生の値を dwXposdwYposdwZpos に格納します。
JOY_CAL_READ4 ラダー情報と x、y、z の各座標を読み取り、生の値を dwXposdwYposdwZposdwRpos に格納します。
JOY_CAL_READ5 ラダー情報と x、y、z、u の各座標を読み取り、生の値を dwXposdwYposdwZposdwRposdwUpos に格納します。
JOY_CAL_READ6 データを提供するジョイスティック ミニ ドライバーが存在する場合、v 軸の生データを読み取ります。それ以外の場合は 0 を返します。
JOY_CAL_READALWAYS ドライバーがデバイスを検出しない場合でも、ジョイスティック ポートを読み取ります。
JOY_CAL_READRONLY データを提供するジョイスティック ミニ ドライバーが存在する場合、ラダー情報を読み取り、生の値を dwRpos に格納します。それ以外の場合は 0 を返します。
JOY_CAL_READXONLY x 座標を読み取り、生の (未校正の) 値を dwXpos に格納します。
JOY_CAL_READXYONLY x 座標と y 座標を読み取り、生の値を dwXposdwYpos に格納します。
JOY_CAL_READYONLY y 座標を読み取り、生の値を dwYpos に格納します。
JOY_CAL_READZONLY z 座標を読み取り、生の値を dwZpos に格納します。
JOY_CAL_READUONLY データを提供するジョイスティック ミニ ドライバーが存在する場合、u 座標を読み取り、生の値を dwUpos に格納します。それ以外の場合は 0 を返します。
JOY_CAL_READVONLY データを提供するジョイスティック ミニ ドライバーが存在する場合、v 座標を読み取り、生の値を dwVpos に格納します。それ以外の場合は 0 を返します。
dwXposDWORD4+8+8現在の X 座標。
dwYposDWORD4+12+12現在の Y 座標。
dwZposDWORD4+16+16現在の Z 座標。
dwRposDWORD4+20+20ラダー (4 番目のジョイスティック軸) の現在位置。
dwUposDWORD4+24+245 番目の軸の現在位置。
dwVposDWORD4+28+286 番目の軸の現在位置。
dwButtonsDWORD4+32+3232 個のジョイスティック ボタンの現在の状態。このメンバーの値には、JOY_BUTTON n フラグの任意の組み合わせを設定できます。n は、押されたボタンに対応する 1 から 32 の範囲の値です。
dwButtonNumberDWORD4+36+36現在押されているボタンの番号。
dwPOVDWORD4+40+40視点コントロールの現在位置。このメンバーの値は 0 から 35,900 の範囲です。これらの値は、各視点の角度 (度) を 100 倍した値を表します。
dwReserved1DWORD4+44+44予約済みです。使用しないでください。
dwReserved2DWORD4+48+48予約済みです。使用しないでください。

公式ドキュメント

JOYINFOEX 構造体には、ジョイスティックの位置、視点 (point-of-view) の位置、およびボタンの状態に関する拡張情報が格納されます。

解説(Remarks)

dwSize メンバーの値は、この構造体を joyGetPosEx 関数に渡すときに、構造体のバージョン番号を識別するためにも使用されます。

視点コントロールを備えたほとんどのデバイスには、5 つの位置しかありません。JOY_RETURNPOV フラグが設定されている場合、これらの位置は次の定数を使用して報告されます。

視点フラグ 説明
JOY_POVBACKWARD 視点ハットが後方に押されています。値 18,000 は 180.00 度 (後方) の方向を表します。
JOY_POVCENTERED 視点ハットがニュートラル位置にあります。値 -1 は、視点ハットに報告する角度がないことを意味します。
JOY_POVFORWARD 視点ハットが前方に押されています。値 0 は 0.00 度 (正面) の方向を表します。
JOY_POVLEFT 視点ハットが左に押されています。値 27,000 は 270.00 度 (左方向に 90.00 度) の方向を表します。
JOY_POVRIGHT 視点ハットが右に押されています。値 9,000 は 90.00 度 (右方向) の方向を表します。

既定のジョイスティック ドライバーは、現在これら 5 つの離散的な方向をサポートしています。定義済みの視点の値のみを受け入れるアプリケーションでは、JOY_RETURNPOV フラグを使用する必要があります。それ以外の角度の読み取り値も受け入れられるアプリケーションでは、連続的なデータが使用可能な場合にそれを取得するために JOY_RETURNPOVCTS フラグを使用してください。JOY_RETURNPOVCTS フラグは、JOY_RETURNPOV フラグで使用される JOY_POV 定数もサポートします。

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

各言語での定義

#include <windows.h>

// JOYINFOEX  (x64 52 / x86 52 バイト)
#pragma pack(push, 1)
typedef struct JOYINFOEX {
    DWORD dwSize;
    DWORD dwFlags;
    DWORD dwXpos;
    DWORD dwYpos;
    DWORD dwZpos;
    DWORD dwRpos;
    DWORD dwUpos;
    DWORD dwVpos;
    DWORD dwButtons;
    DWORD dwButtonNumber;
    DWORD dwPOV;
    DWORD dwReserved1;
    DWORD dwReserved2;
} JOYINFOEX;
#pragma pack(pop)
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct JOYINFOEX
{
    public uint dwSize;
    public uint dwFlags;
    public uint dwXpos;
    public uint dwYpos;
    public uint dwZpos;
    public uint dwRpos;
    public uint dwUpos;
    public uint dwVpos;
    public uint dwButtons;
    public uint dwButtonNumber;
    public uint dwPOV;
    public uint dwReserved1;
    public uint dwReserved2;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure JOYINFOEX
    Public dwSize As UInteger
    Public dwFlags As UInteger
    Public dwXpos As UInteger
    Public dwYpos As UInteger
    Public dwZpos As UInteger
    Public dwRpos As UInteger
    Public dwUpos As UInteger
    Public dwVpos As UInteger
    Public dwButtons As UInteger
    Public dwButtonNumber As UInteger
    Public dwPOV As UInteger
    Public dwReserved1 As UInteger
    Public dwReserved2 As UInteger
End Structure
import ctypes
from ctypes import wintypes

class JOYINFOEX(ctypes.Structure):
    _pack_ = 1
    _fields_ = [
        ("dwSize", wintypes.DWORD),
        ("dwFlags", wintypes.DWORD),
        ("dwXpos", wintypes.DWORD),
        ("dwYpos", wintypes.DWORD),
        ("dwZpos", wintypes.DWORD),
        ("dwRpos", wintypes.DWORD),
        ("dwUpos", wintypes.DWORD),
        ("dwVpos", wintypes.DWORD),
        ("dwButtons", wintypes.DWORD),
        ("dwButtonNumber", wintypes.DWORD),
        ("dwPOV", wintypes.DWORD),
        ("dwReserved1", wintypes.DWORD),
        ("dwReserved2", wintypes.DWORD),
    ]
#[repr(C, packed(1))]
pub struct JOYINFOEX {
    pub dwSize: u32,
    pub dwFlags: u32,
    pub dwXpos: u32,
    pub dwYpos: u32,
    pub dwZpos: u32,
    pub dwRpos: u32,
    pub dwUpos: u32,
    pub dwVpos: u32,
    pub dwButtons: u32,
    pub dwButtonNumber: u32,
    pub dwPOV: u32,
    pub dwReserved1: u32,
    pub dwReserved2: u32,
}
import "golang.org/x/sys/windows"

type JOYINFOEX struct {
	dwSize uint32
	dwFlags uint32
	dwXpos uint32
	dwYpos uint32
	dwZpos uint32
	dwRpos uint32
	dwUpos uint32
	dwVpos uint32
	dwButtons uint32
	dwButtonNumber uint32
	dwPOV uint32
	dwReserved1 uint32
	dwReserved2 uint32
}
type
  JOYINFOEX = packed record
    dwSize: DWORD;
    dwFlags: DWORD;
    dwXpos: DWORD;
    dwYpos: DWORD;
    dwZpos: DWORD;
    dwRpos: DWORD;
    dwUpos: DWORD;
    dwVpos: DWORD;
    dwButtons: DWORD;
    dwButtonNumber: DWORD;
    dwPOV: DWORD;
    dwReserved1: DWORD;
    dwReserved2: DWORD;
  end;
const JOYINFOEX = extern struct {
    dwSize: u32,
    dwFlags: u32,
    dwXpos: u32,
    dwYpos: u32,
    dwZpos: u32,
    dwRpos: u32,
    dwUpos: u32,
    dwVpos: u32,
    dwButtons: u32,
    dwButtonNumber: u32,
    dwPOV: u32,
    dwReserved1: u32,
    dwReserved2: u32,
};
type
  JOYINFOEX {.packed.} = object
    dwSize: uint32
    dwFlags: uint32
    dwXpos: uint32
    dwYpos: uint32
    dwZpos: uint32
    dwRpos: uint32
    dwUpos: uint32
    dwVpos: uint32
    dwButtons: uint32
    dwButtonNumber: uint32
    dwPOV: uint32
    dwReserved1: uint32
    dwReserved2: uint32
align(1)
struct JOYINFOEX
{
    uint dwSize;
    uint dwFlags;
    uint dwXpos;
    uint dwYpos;
    uint dwZpos;
    uint dwRpos;
    uint dwUpos;
    uint dwVpos;
    uint dwButtons;
    uint dwButtonNumber;
    uint dwPOV;
    uint dwReserved1;
    uint dwReserved2;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; JOYINFOEX サイズ: 52 バイト(x64)
dim st, 13    ; 4byte整数×13(構造体サイズ 52 / 4 切り上げ)
; dwSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; dwFlags : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; dwXpos : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; dwYpos : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; dwZpos : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; dwRpos : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; dwUpos : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; dwVpos : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; dwButtons : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; dwButtonNumber : DWORD (+36, 4byte)  st.9 = 値  /  値 = st.9   (lpoke/lpeek も可)
; dwPOV : DWORD (+40, 4byte)  st.10 = 値  /  値 = st.10   (lpoke/lpeek も可)
; dwReserved1 : DWORD (+44, 4byte)  st.11 = 値  /  値 = st.11   (lpoke/lpeek も可)
; dwReserved2 : DWORD (+48, 4byte)  st.12 = 値  /  値 = st.12   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global JOYINFOEX, pack=1
    #field int dwSize
    #field int dwFlags
    #field int dwXpos
    #field int dwYpos
    #field int dwZpos
    #field int dwRpos
    #field int dwUpos
    #field int dwVpos
    #field int dwButtons
    #field int dwButtonNumber
    #field int dwPOV
    #field int dwReserved1
    #field int dwReserved2
#endstruct

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