Win32 API 日本語リファレンス
ホームUI.Input.GameInput › GameInputRawDeviceItemCollectionInfo

GameInputRawDeviceItemCollectionInfo

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

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

フィールド

フィールドサイズx64x86説明
kindGameInputRawDeviceItemCollectionKind4+0+0アイテムコレクションの種別を示す値である。
childCountDWORD4+4+4子コレクションの個数である。
siblingCountDWORD4+8+8兄弟コレクションの個数である。
usageCountDWORD4+12+12usages配列のユーセージ個数である。
usagesGameInputUsage*8/4+16+16このコレクションのユーセージ配列へのポインタである。
parentGameInputRawDeviceItemCollectionInfo*8/4+24+20親コレクション情報へのポインタである。NULL可。
firstSiblingGameInputRawDeviceItemCollectionInfo*8/4+32+24最初の兄弟コレクションへのポインタである。
previousSiblingGameInputRawDeviceItemCollectionInfo*8/4+40+28前の兄弟コレクションへのポインタである。
nextSiblingGameInputRawDeviceItemCollectionInfo*8/4+48+32次の兄弟コレクションへのポインタである。
lastSiblingGameInputRawDeviceItemCollectionInfo*8/4+56+36最後の兄弟コレクションへのポインタである。
firstChildGameInputRawDeviceItemCollectionInfo*8/4+64+40最初の子コレクションへのポインタである。
lastChildGameInputRawDeviceItemCollectionInfo*8/4+72+44最後の子コレクションへのポインタである。

各言語での定義

#include <windows.h>

// GameInputRawDeviceItemCollectionInfo  (x64 80 / x86 48 バイト)
typedef struct GameInputRawDeviceItemCollectionInfo {
    GameInputRawDeviceItemCollectionKind kind;
    DWORD childCount;
    DWORD siblingCount;
    DWORD usageCount;
    GameInputUsage* usages;
    GameInputRawDeviceItemCollectionInfo* parent;
    GameInputRawDeviceItemCollectionInfo* firstSibling;
    GameInputRawDeviceItemCollectionInfo* previousSibling;
    GameInputRawDeviceItemCollectionInfo* nextSibling;
    GameInputRawDeviceItemCollectionInfo* lastSibling;
    GameInputRawDeviceItemCollectionInfo* firstChild;
    GameInputRawDeviceItemCollectionInfo* lastChild;
} GameInputRawDeviceItemCollectionInfo;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct GameInputRawDeviceItemCollectionInfo
{
    public int kind;
    public uint childCount;
    public uint siblingCount;
    public uint usageCount;
    public IntPtr usages;
    public IntPtr parent;
    public IntPtr firstSibling;
    public IntPtr previousSibling;
    public IntPtr nextSibling;
    public IntPtr lastSibling;
    public IntPtr firstChild;
    public IntPtr lastChild;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure GameInputRawDeviceItemCollectionInfo
    Public kind As Integer
    Public childCount As UInteger
    Public siblingCount As UInteger
    Public usageCount As UInteger
    Public usages As IntPtr
    Public parent As IntPtr
    Public firstSibling As IntPtr
    Public previousSibling As IntPtr
    Public nextSibling As IntPtr
    Public lastSibling As IntPtr
    Public firstChild As IntPtr
    Public lastChild As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class GameInputRawDeviceItemCollectionInfo(ctypes.Structure):
    _fields_ = [
        ("kind", ctypes.c_int),
        ("childCount", wintypes.DWORD),
        ("siblingCount", wintypes.DWORD),
        ("usageCount", wintypes.DWORD),
        ("usages", ctypes.c_void_p),
        ("parent", ctypes.c_void_p),
        ("firstSibling", ctypes.c_void_p),
        ("previousSibling", ctypes.c_void_p),
        ("nextSibling", ctypes.c_void_p),
        ("lastSibling", ctypes.c_void_p),
        ("firstChild", ctypes.c_void_p),
        ("lastChild", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct GameInputRawDeviceItemCollectionInfo {
    pub kind: i32,
    pub childCount: u32,
    pub siblingCount: u32,
    pub usageCount: u32,
    pub usages: *mut core::ffi::c_void,
    pub parent: *mut core::ffi::c_void,
    pub firstSibling: *mut core::ffi::c_void,
    pub previousSibling: *mut core::ffi::c_void,
    pub nextSibling: *mut core::ffi::c_void,
    pub lastSibling: *mut core::ffi::c_void,
    pub firstChild: *mut core::ffi::c_void,
    pub lastChild: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type GameInputRawDeviceItemCollectionInfo struct {
	kind int32
	childCount uint32
	siblingCount uint32
	usageCount uint32
	usages uintptr
	parent uintptr
	firstSibling uintptr
	previousSibling uintptr
	nextSibling uintptr
	lastSibling uintptr
	firstChild uintptr
	lastChild uintptr
}
type
  GameInputRawDeviceItemCollectionInfo = record
    kind: Integer;
    childCount: DWORD;
    siblingCount: DWORD;
    usageCount: DWORD;
    usages: Pointer;
    parent: Pointer;
    firstSibling: Pointer;
    previousSibling: Pointer;
    nextSibling: Pointer;
    lastSibling: Pointer;
    firstChild: Pointer;
    lastChild: Pointer;
  end;
const GameInputRawDeviceItemCollectionInfo = extern struct {
    kind: i32,
    childCount: u32,
    siblingCount: u32,
    usageCount: u32,
    usages: ?*anyopaque,
    parent: ?*anyopaque,
    firstSibling: ?*anyopaque,
    previousSibling: ?*anyopaque,
    nextSibling: ?*anyopaque,
    lastSibling: ?*anyopaque,
    firstChild: ?*anyopaque,
    lastChild: ?*anyopaque,
};
type
  GameInputRawDeviceItemCollectionInfo {.bycopy.} = object
    kind: int32
    childCount: uint32
    siblingCount: uint32
    usageCount: uint32
    usages: pointer
    parent: pointer
    firstSibling: pointer
    previousSibling: pointer
    nextSibling: pointer
    lastSibling: pointer
    firstChild: pointer
    lastChild: pointer
struct GameInputRawDeviceItemCollectionInfo
{
    int kind;
    uint childCount;
    uint siblingCount;
    uint usageCount;
    void* usages;
    void* parent;
    void* firstSibling;
    void* previousSibling;
    void* nextSibling;
    void* lastSibling;
    void* firstChild;
    void* lastChild;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; GameInputRawDeviceItemCollectionInfo サイズ: 48 バイト(x86)
dim st, 12    ; 4byte整数×12(構造体サイズ 48 / 4 切り上げ)
; kind : GameInputRawDeviceItemCollectionKind (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; childCount : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; siblingCount : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; usageCount : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; usages : GameInputUsage* (+16, 4byte)  varptr(st)+16 を基点に操作(4byte:入れ子/配列)
; parent : GameInputRawDeviceItemCollectionInfo* (+20, 4byte)  varptr(st)+20 を基点に操作(4byte:入れ子/配列)
; firstSibling : GameInputRawDeviceItemCollectionInfo* (+24, 4byte)  varptr(st)+24 を基点に操作(4byte:入れ子/配列)
; previousSibling : GameInputRawDeviceItemCollectionInfo* (+28, 4byte)  varptr(st)+28 を基点に操作(4byte:入れ子/配列)
; nextSibling : GameInputRawDeviceItemCollectionInfo* (+32, 4byte)  varptr(st)+32 を基点に操作(4byte:入れ子/配列)
; lastSibling : GameInputRawDeviceItemCollectionInfo* (+36, 4byte)  varptr(st)+36 を基点に操作(4byte:入れ子/配列)
; firstChild : GameInputRawDeviceItemCollectionInfo* (+40, 4byte)  varptr(st)+40 を基点に操作(4byte:入れ子/配列)
; lastChild : GameInputRawDeviceItemCollectionInfo* (+44, 4byte)  varptr(st)+44 を基点に操作(4byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; GameInputRawDeviceItemCollectionInfo サイズ: 80 バイト(x64)
dim st, 20    ; 4byte整数×20(構造体サイズ 80 / 4 切り上げ)
; kind : GameInputRawDeviceItemCollectionKind (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; childCount : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; siblingCount : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; usageCount : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; usages : GameInputUsage* (+16, 8byte)  varptr(st)+16 を基点に操作(8byte:入れ子/配列)
; parent : GameInputRawDeviceItemCollectionInfo* (+24, 8byte)  varptr(st)+24 を基点に操作(8byte:入れ子/配列)
; firstSibling : GameInputRawDeviceItemCollectionInfo* (+32, 8byte)  varptr(st)+32 を基点に操作(8byte:入れ子/配列)
; previousSibling : GameInputRawDeviceItemCollectionInfo* (+40, 8byte)  varptr(st)+40 を基点に操作(8byte:入れ子/配列)
; nextSibling : GameInputRawDeviceItemCollectionInfo* (+48, 8byte)  varptr(st)+48 を基点に操作(8byte:入れ子/配列)
; lastSibling : GameInputRawDeviceItemCollectionInfo* (+56, 8byte)  varptr(st)+56 を基点に操作(8byte:入れ子/配列)
; firstChild : GameInputRawDeviceItemCollectionInfo* (+64, 8byte)  varptr(st)+64 を基点に操作(8byte:入れ子/配列)
; lastChild : GameInputRawDeviceItemCollectionInfo* (+72, 8byte)  varptr(st)+72 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global GameInputRawDeviceItemCollectionInfo
    #field int kind
    #field int childCount
    #field int siblingCount
    #field int usageCount
    #field intptr usages
    #field intptr parent
    #field intptr firstSibling
    #field intptr previousSibling
    #field intptr nextSibling
    #field intptr lastSibling
    #field intptr firstChild
    #field intptr lastChild
#endstruct

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