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

DIDEVICEOBJECTINSTANCEA

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

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

フィールド

フィールドサイズx64x86説明
dwSizeDWORD4+0+0この構造体のバイトサイズ。
guidTypeGUID16+4+4オブジェクト種別を示すGUID(X軸/ボタン等)。
dwOfsDWORD4+20+20データ形式内でのこのオブジェクトのバイトオフセット。
dwTypeDWORD4+24+24オブジェクトの種別とインスタンス番号を符号化した値。
dwFlagsDWORD4+28+28オブジェクトの属性を示すフラグ(DIDOI_*)。
tszNameCHAR260+32+32オブジェクトの名前を示すASCII文字列。
dwFFMaxForceDWORD4+292+292このオブジェクトで出力可能な最大フォース。
dwFFForceResolutionDWORD4+296+296フォース出力の分解能(ステップ数)。
wCollectionNumberWORD2+300+300HIDコレクション番号。
wDesignatorIndexWORD2+302+302HIDデジグネーター(物理位置)インデックス。
wUsagePageWORD2+304+304HIDのUsage Page値。
wUsageWORD2+306+306HIDのUsage値。
dwDimensionDWORD4+308+308物理量の次元を示す値。
wExponentWORD2+312+312物理量の指数(スケール)を示す値。
wReportIdWORD2+314+314オブジェクトが属するHIDレポートID。

各言語での定義

#include <windows.h>

// DIDEVICEOBJECTINSTANCEA  (x64 316 / x86 316 バイト)
typedef struct DIDEVICEOBJECTINSTANCEA {
    DWORD dwSize;
    GUID guidType;
    DWORD dwOfs;
    DWORD dwType;
    DWORD dwFlags;
    CHAR tszName[260];
    DWORD dwFFMaxForce;
    DWORD dwFFForceResolution;
    WORD wCollectionNumber;
    WORD wDesignatorIndex;
    WORD wUsagePage;
    WORD wUsage;
    DWORD dwDimension;
    WORD wExponent;
    WORD wReportId;
} DIDEVICEOBJECTINSTANCEA;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DIDEVICEOBJECTINSTANCEA
{
    public uint dwSize;
    public Guid guidType;
    public uint dwOfs;
    public uint dwType;
    public uint dwFlags;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 260)] public sbyte[] tszName;
    public uint dwFFMaxForce;
    public uint dwFFForceResolution;
    public ushort wCollectionNumber;
    public ushort wDesignatorIndex;
    public ushort wUsagePage;
    public ushort wUsage;
    public uint dwDimension;
    public ushort wExponent;
    public ushort wReportId;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DIDEVICEOBJECTINSTANCEA
    Public dwSize As UInteger
    Public guidType As Guid
    Public dwOfs As UInteger
    Public dwType As UInteger
    Public dwFlags As UInteger
    <MarshalAs(UnmanagedType.ByValArray, SizeConst:=260)> Public tszName() As SByte
    Public dwFFMaxForce As UInteger
    Public dwFFForceResolution As UInteger
    Public wCollectionNumber As UShort
    Public wDesignatorIndex As UShort
    Public wUsagePage As UShort
    Public wUsage As UShort
    Public dwDimension As UInteger
    Public wExponent As UShort
    Public wReportId As UShort
End Structure
import ctypes
from ctypes import wintypes

class DIDEVICEOBJECTINSTANCEA(ctypes.Structure):
    _fields_ = [
        ("dwSize", wintypes.DWORD),
        ("guidType", GUID),
        ("dwOfs", wintypes.DWORD),
        ("dwType", wintypes.DWORD),
        ("dwFlags", wintypes.DWORD),
        ("tszName", ctypes.c_byte * 260),
        ("dwFFMaxForce", wintypes.DWORD),
        ("dwFFForceResolution", wintypes.DWORD),
        ("wCollectionNumber", ctypes.c_ushort),
        ("wDesignatorIndex", ctypes.c_ushort),
        ("wUsagePage", ctypes.c_ushort),
        ("wUsage", ctypes.c_ushort),
        ("dwDimension", wintypes.DWORD),
        ("wExponent", ctypes.c_ushort),
        ("wReportId", ctypes.c_ushort),
    ]
#[repr(C)]
pub struct DIDEVICEOBJECTINSTANCEA {
    pub dwSize: u32,
    pub guidType: GUID,
    pub dwOfs: u32,
    pub dwType: u32,
    pub dwFlags: u32,
    pub tszName: [i8; 260],
    pub dwFFMaxForce: u32,
    pub dwFFForceResolution: u32,
    pub wCollectionNumber: u16,
    pub wDesignatorIndex: u16,
    pub wUsagePage: u16,
    pub wUsage: u16,
    pub dwDimension: u32,
    pub wExponent: u16,
    pub wReportId: u16,
}
import "golang.org/x/sys/windows"

type DIDEVICEOBJECTINSTANCEA struct {
	dwSize uint32
	guidType windows.GUID
	dwOfs uint32
	dwType uint32
	dwFlags uint32
	tszName [260]int8
	dwFFMaxForce uint32
	dwFFForceResolution uint32
	wCollectionNumber uint16
	wDesignatorIndex uint16
	wUsagePage uint16
	wUsage uint16
	dwDimension uint32
	wExponent uint16
	wReportId uint16
}
type
  DIDEVICEOBJECTINSTANCEA = record
    dwSize: DWORD;
    guidType: TGUID;
    dwOfs: DWORD;
    dwType: DWORD;
    dwFlags: DWORD;
    tszName: array[0..259] of Shortint;
    dwFFMaxForce: DWORD;
    dwFFForceResolution: DWORD;
    wCollectionNumber: Word;
    wDesignatorIndex: Word;
    wUsagePage: Word;
    wUsage: Word;
    dwDimension: DWORD;
    wExponent: Word;
    wReportId: Word;
  end;
const DIDEVICEOBJECTINSTANCEA = extern struct {
    dwSize: u32,
    guidType: GUID,
    dwOfs: u32,
    dwType: u32,
    dwFlags: u32,
    tszName: [260]i8,
    dwFFMaxForce: u32,
    dwFFForceResolution: u32,
    wCollectionNumber: u16,
    wDesignatorIndex: u16,
    wUsagePage: u16,
    wUsage: u16,
    dwDimension: u32,
    wExponent: u16,
    wReportId: u16,
};
type
  DIDEVICEOBJECTINSTANCEA {.bycopy.} = object
    dwSize: uint32
    guidType: GUID
    dwOfs: uint32
    dwType: uint32
    dwFlags: uint32
    tszName: array[260, int8]
    dwFFMaxForce: uint32
    dwFFForceResolution: uint32
    wCollectionNumber: uint16
    wDesignatorIndex: uint16
    wUsagePage: uint16
    wUsage: uint16
    dwDimension: uint32
    wExponent: uint16
    wReportId: uint16
struct DIDEVICEOBJECTINSTANCEA
{
    uint dwSize;
    GUID guidType;
    uint dwOfs;
    uint dwType;
    uint dwFlags;
    byte[260] tszName;
    uint dwFFMaxForce;
    uint dwFFForceResolution;
    ushort wCollectionNumber;
    ushort wDesignatorIndex;
    ushort wUsagePage;
    ushort wUsage;
    uint dwDimension;
    ushort wExponent;
    ushort wReportId;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DIDEVICEOBJECTINSTANCEA サイズ: 316 バイト(x64)
dim st, 79    ; 4byte整数×79(構造体サイズ 316 / 4 切り上げ)
; dwSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; guidType : GUID (+4, 16byte)  varptr(st)+4 を基点に操作(16byte:入れ子/配列)
; dwOfs : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; dwType : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; dwFlags : DWORD (+28, 4byte)  st.7 = 値  /  値 = st.7   (lpoke/lpeek も可)
; tszName : CHAR (+32, 260byte)  varptr(st)+32 を基点に操作(260byte:入れ子/配列)
; dwFFMaxForce : DWORD (+292, 4byte)  st.73 = 値  /  値 = st.73   (lpoke/lpeek も可)
; dwFFForceResolution : DWORD (+296, 4byte)  st.74 = 値  /  値 = st.74   (lpoke/lpeek も可)
; wCollectionNumber : WORD (+300, 2byte)  wpoke st,300,値  /  値 = wpeek(st,300)
; wDesignatorIndex : WORD (+302, 2byte)  wpoke st,302,値  /  値 = wpeek(st,302)
; wUsagePage : WORD (+304, 2byte)  wpoke st,304,値  /  値 = wpeek(st,304)
; wUsage : WORD (+306, 2byte)  wpoke st,306,値  /  値 = wpeek(st,306)
; dwDimension : DWORD (+308, 4byte)  st.77 = 値  /  値 = st.77   (lpoke/lpeek も可)
; wExponent : WORD (+312, 2byte)  wpoke st,312,値  /  値 = wpeek(st,312)
; wReportId : WORD (+314, 2byte)  wpoke st,314,値  /  値 = wpeek(st,314)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global GUID, pack=1
    #field int Data1
    #field short Data2
    #field short Data3
    #field byte Data4 8
#endstruct

#defstruct global DIDEVICEOBJECTINSTANCEA
    #field int dwSize
    #field GUID guidType
    #field int dwOfs
    #field int dwType
    #field int dwFlags
    #field byte tszName 260
    #field int dwFFMaxForce
    #field int dwFFForceResolution
    #field short wCollectionNumber
    #field short wDesignatorIndex
    #field short wUsagePage
    #field short wUsage
    #field int dwDimension
    #field short wExponent
    #field short wReportId
#endstruct

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