ホーム › Devices.HumanInterfaceDevice › HIDP_LINK_COLLECTION_NODE
HIDP_LINK_COLLECTION_NODE
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| LinkUsage | WORD | 2 | +0 | +0 | このコレクションのUsage値。 |
| LinkUsagePage | WORD | 2 | +2 | +2 | このコレクションのUsage Page値。 |
| Parent | WORD | 2 | +4 | +4 | 親コレクションのインデックス。 |
| NumberOfChildren | WORD | 2 | +6 | +6 | 子コレクションの数。 |
| NextSibling | WORD | 2 | +8 | +8 | 次の兄弟コレクションのインデックス。 |
| FirstChild | WORD | 2 | +10 | +10 | 最初の子コレクションのインデックス。 |
| _bitfield | DWORD | 4 | +12 | +12 | コレクション種別等を符号化したビットフィールド。 |
| UserContext | void* | 8/4 | +16 | +16 | アプリケーションが利用する任意のコンテキストポインター。 |
各言語での定義
#include <windows.h>
// HIDP_LINK_COLLECTION_NODE (x64 24 / x86 20 バイト)
#pragma pack(push, 4)
typedef struct HIDP_LINK_COLLECTION_NODE {
WORD LinkUsage;
WORD LinkUsagePage;
WORD Parent;
WORD NumberOfChildren;
WORD NextSibling;
WORD FirstChild;
DWORD _bitfield;
void* UserContext;
} HIDP_LINK_COLLECTION_NODE;
#pragma pack(pop)using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Unicode)]
public struct HIDP_LINK_COLLECTION_NODE
{
public ushort LinkUsage;
public ushort LinkUsagePage;
public ushort Parent;
public ushort NumberOfChildren;
public ushort NextSibling;
public ushort FirstChild;
public uint _bitfield;
public IntPtr UserContext;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, Pack:=4, CharSet:=CharSet.Unicode)>
Public Structure HIDP_LINK_COLLECTION_NODE
Public LinkUsage As UShort
Public LinkUsagePage As UShort
Public Parent As UShort
Public NumberOfChildren As UShort
Public NextSibling As UShort
Public FirstChild As UShort
Public _bitfield As UInteger
Public UserContext As IntPtr
End Structureimport ctypes
from ctypes import wintypes
class HIDP_LINK_COLLECTION_NODE(ctypes.Structure):
_pack_ = 4
_fields_ = [
("LinkUsage", ctypes.c_ushort),
("LinkUsagePage", ctypes.c_ushort),
("Parent", ctypes.c_ushort),
("NumberOfChildren", ctypes.c_ushort),
("NextSibling", ctypes.c_ushort),
("FirstChild", ctypes.c_ushort),
("_bitfield", wintypes.DWORD),
("UserContext", ctypes.c_void_p),
]#[repr(C, packed(4))]
pub struct HIDP_LINK_COLLECTION_NODE {
pub LinkUsage: u16,
pub LinkUsagePage: u16,
pub Parent: u16,
pub NumberOfChildren: u16,
pub NextSibling: u16,
pub FirstChild: u16,
pub _bitfield: u32,
pub UserContext: *mut core::ffi::c_void,
}import "golang.org/x/sys/windows"
type HIDP_LINK_COLLECTION_NODE struct {
LinkUsage uint16
LinkUsagePage uint16
Parent uint16
NumberOfChildren uint16
NextSibling uint16
FirstChild uint16
_bitfield uint32
UserContext uintptr
}type
HIDP_LINK_COLLECTION_NODE = packed record
LinkUsage: Word;
LinkUsagePage: Word;
Parent: Word;
NumberOfChildren: Word;
NextSibling: Word;
FirstChild: Word;
_bitfield: DWORD;
UserContext: Pointer;
end;const HIDP_LINK_COLLECTION_NODE = extern struct {
LinkUsage: u16,
LinkUsagePage: u16,
Parent: u16,
NumberOfChildren: u16,
NextSibling: u16,
FirstChild: u16,
_bitfield: u32,
UserContext: ?*anyopaque,
};type
HIDP_LINK_COLLECTION_NODE {.packed.} = object
LinkUsage: uint16
LinkUsagePage: uint16
Parent: uint16
NumberOfChildren: uint16
NextSibling: uint16
FirstChild: uint16
_bitfield: uint32
UserContext: pointeralign(4)
struct HIDP_LINK_COLLECTION_NODE
{
ushort LinkUsage;
ushort LinkUsagePage;
ushort Parent;
ushort NumberOfChildren;
ushort NextSibling;
ushort FirstChild;
uint _bitfield;
void* UserContext;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; HIDP_LINK_COLLECTION_NODE サイズ: 20 バイト(x86)
dim st, 5 ; 4byte整数×5(構造体サイズ 20 / 4 切り上げ)
; LinkUsage : WORD (+0, 2byte) wpoke st,0,値 / 値 = wpeek(st,0)
; LinkUsagePage : WORD (+2, 2byte) wpoke st,2,値 / 値 = wpeek(st,2)
; Parent : WORD (+4, 2byte) wpoke st,4,値 / 値 = wpeek(st,4)
; NumberOfChildren : WORD (+6, 2byte) wpoke st,6,値 / 値 = wpeek(st,6)
; NextSibling : WORD (+8, 2byte) wpoke st,8,値 / 値 = wpeek(st,8)
; FirstChild : WORD (+10, 2byte) wpoke st,10,値 / 値 = wpeek(st,10)
; _bitfield : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; UserContext : void* (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; HIDP_LINK_COLLECTION_NODE サイズ: 24 バイト(x64)
dim st, 6 ; 4byte整数×6(構造体サイズ 24 / 4 切り上げ)
; LinkUsage : WORD (+0, 2byte) wpoke st,0,値 / 値 = wpeek(st,0)
; LinkUsagePage : WORD (+2, 2byte) wpoke st,2,値 / 値 = wpeek(st,2)
; Parent : WORD (+4, 2byte) wpoke st,4,値 / 値 = wpeek(st,4)
; NumberOfChildren : WORD (+6, 2byte) wpoke st,6,値 / 値 = wpeek(st,6)
; NextSibling : WORD (+8, 2byte) wpoke st,8,値 / 値 = wpeek(st,8)
; FirstChild : WORD (+10, 2byte) wpoke st,10,値 / 値 = wpeek(st,10)
; _bitfield : DWORD (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; UserContext : void* (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global HIDP_LINK_COLLECTION_NODE, pack=4
#field short LinkUsage
#field short LinkUsagePage
#field short Parent
#field short NumberOfChildren
#field short NextSibling
#field short FirstChild
#field int _bitfield
#field intptr UserContext
#endstruct
stdim st, HIDP_LINK_COLLECTION_NODE ; NSTRUCT 変数を確保
st->LinkUsage = 100
mes "LinkUsage=" + st->LinkUsage