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

XINPUT_KEYSTROKE

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

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

フィールド

フィールドサイズx64x86説明
VirtualKeyXINPUT_VIRTUAL_KEY2+0+0押されたコントローラ仮想キーコード。
UnicodeWCHAR2+2+2対応するUnicode文字。現在は未使用で0。
FlagsXINPUT_KEYSTROKE_FLAGS2+4+4キーストロークの状態フラグ。押下・解放・リピート等を示す。
UserIndexBYTE1+6+6イベントを発生させたユーザー(コントローラ)のインデックス(0〜3)。
HidCodeBYTE1+7+7対応するHIDコード。値がない場合は0。

各言語での定義

#include <windows.h>

// XINPUT_KEYSTROKE  (x64 8 / x86 8 バイト)
typedef struct XINPUT_KEYSTROKE {
    XINPUT_VIRTUAL_KEY VirtualKey;
    WCHAR Unicode;
    XINPUT_KEYSTROKE_FLAGS Flags;
    BYTE UserIndex;
    BYTE HidCode;
} XINPUT_KEYSTROKE;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct XINPUT_KEYSTROKE
{
    public ushort VirtualKey;
    public char Unicode;
    public ushort Flags;
    public byte UserIndex;
    public byte HidCode;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure XINPUT_KEYSTROKE
    Public VirtualKey As UShort
    Public Unicode As Char
    Public Flags As UShort
    Public UserIndex As Byte
    Public HidCode As Byte
End Structure
import ctypes
from ctypes import wintypes

class XINPUT_KEYSTROKE(ctypes.Structure):
    _fields_ = [
        ("VirtualKey", ctypes.c_ushort),
        ("Unicode", ctypes.c_wchar),
        ("Flags", ctypes.c_ushort),
        ("UserIndex", ctypes.c_ubyte),
        ("HidCode", ctypes.c_ubyte),
    ]
#[repr(C)]
pub struct XINPUT_KEYSTROKE {
    pub VirtualKey: u16,
    pub Unicode: u16,
    pub Flags: u16,
    pub UserIndex: u8,
    pub HidCode: u8,
}
import "golang.org/x/sys/windows"

type XINPUT_KEYSTROKE struct {
	VirtualKey uint16
	Unicode uint16
	Flags uint16
	UserIndex byte
	HidCode byte
}
type
  XINPUT_KEYSTROKE = record
    VirtualKey: Word;
    Unicode: WideChar;
    Flags: Word;
    UserIndex: Byte;
    HidCode: Byte;
  end;
const XINPUT_KEYSTROKE = extern struct {
    VirtualKey: u16,
    Unicode: u16,
    Flags: u16,
    UserIndex: u8,
    HidCode: u8,
};
type
  XINPUT_KEYSTROKE {.bycopy.} = object
    VirtualKey: uint16
    Unicode: uint16
    Flags: uint16
    UserIndex: uint8
    HidCode: uint8
struct XINPUT_KEYSTROKE
{
    ushort VirtualKey;
    wchar Unicode;
    ushort Flags;
    ubyte UserIndex;
    ubyte HidCode;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; XINPUT_KEYSTROKE サイズ: 8 バイト(x64)
dim st, 2    ; 4byte整数×2(構造体サイズ 8 / 4 切り上げ)
; VirtualKey : XINPUT_VIRTUAL_KEY (+0, 2byte)  wpoke st,0,値  /  値 = wpeek(st,0)
; Unicode : WCHAR (+2, 2byte)  wpoke st,2,値  /  値 = wpeek(st,2)
; Flags : XINPUT_KEYSTROKE_FLAGS (+4, 2byte)  wpoke st,4,値  /  値 = wpeek(st,4)
; UserIndex : BYTE (+6, 1byte)  poke st,6,値  /  値 = peek(st,6)
; HidCode : BYTE (+7, 1byte)  poke st,7,値  /  値 = peek(st,7)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global XINPUT_KEYSTROKE
    #field short VirtualKey
    #field short Unicode
    #field short Flags
    #field byte UserIndex
    #field byte HidCode
#endstruct

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