JOYINFOEX
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| dwSize | DWORD | 4 | +0 | +0 | この構造体のサイズ (バイト単位)。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| dwFlags | DWORD | 4 | +4 | +4 | この構造体で返される有効な情報を示すフラグです。有効な情報が含まれないメンバーは 0 に設定されます。次のフラグが定義されています。
次のフラグは、ジョイスティックを校正するためのデータを提供するもので、カスタム校正アプリケーション向けです。
| ||||||||||||||||||||||||||||||||||||||||||||||||||||
| dwXpos | DWORD | 4 | +8 | +8 | 現在の X 座標。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| dwYpos | DWORD | 4 | +12 | +12 | 現在の Y 座標。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| dwZpos | DWORD | 4 | +16 | +16 | 現在の Z 座標。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| dwRpos | DWORD | 4 | +20 | +20 | ラダー (4 番目のジョイスティック軸) の現在位置。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| dwUpos | DWORD | 4 | +24 | +24 | 5 番目の軸の現在位置。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| dwVpos | DWORD | 4 | +28 | +28 | 6 番目の軸の現在位置。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| dwButtons | DWORD | 4 | +32 | +32 | 32 個のジョイスティック ボタンの現在の状態。このメンバーの値には、JOY_BUTTON n フラグの任意の組み合わせを設定できます。n は、押されたボタンに対応する 1 から 32 の範囲の値です。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| dwButtonNumber | DWORD | 4 | +36 | +36 | 現在押されているボタンの番号。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| dwPOV | DWORD | 4 | +40 | +40 | 視点コントロールの現在位置。このメンバーの値は 0 から 35,900 の範囲です。これらの値は、各視点の角度 (度) を 100 倍した値を表します。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| dwReserved1 | DWORD | 4 | +44 | +44 | 予約済みです。使用しないでください。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||
| dwReserved2 | DWORD | 4 | +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 公式リファレンス: 英語 (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 Structureimport 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: uint32align(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