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キー、ボタン、またはスティック操作の仮想キーコードです。有効な仮想キー (VK_xxx) コードの一覧については XInput.h を参照してください。「解説」も参照してください。
UnicodeWCHAR2+2+2このメンバーは使用されておらず、値は 0 です。
FlagsXINPUT_KEYSTROKE_FLAGS2+4+4

入力イベントが発生した時点のキーボードの状態を示すフラグです。このメンバーには、次のフラグの任意の組み合わせを指定できます:

説明
XINPUT_KEYSTROKE_KEYDOWN キーが押されました。
XINPUT_KEYSTROKE_KEYUP キーが離されました。
XINPUT_KEYSTROKE_REPEAT 押されたままのキーのリピートです。
UserIndexBYTE1+6+6デバイスに関連付けられている、サインイン済みのゲーマーのインデックスです。0 ~ 3 の範囲の値を取ります。
HidCodeBYTE1+7+7入力に対応する HID コードです。対応する HID コードがない場合、この値は 0 です。

公式ドキュメント

XInputGetKeystroke が返すキーストロークデータを指定します。

解説(Remarks)

将来のデバイスは、現在のデバイスではサポートされておらず、現時点では未定義の HID コードや仮想キー値を返す可能性があります。アプリケーションは、これらの予期しない値を無視してください。

仮想キー コードは、キーボード上の特定の物理キーを表すバイト値であり、キーボードの状態に応じてそのキーに割り当てられる文字 (割り当てがない場合もあります) を表すものではありません。仮想キーが押された時点のキーボードの状態によって、報告される文字は変化します。たとえば、VK_4 は SHIFT キーの状態に応じて「4」または「$」を表す場合があります。

報告されるキーボードイベントには、そのイベントの原因となった仮想キー、キーが押されたか離されたか (またはリピート中か)、およびイベント発生時のキーボードの状態が含まれます。キーボードの状態には、CTRL、ALT、SHIFT の各キーが押されているかどうかの情報が含まれます。

キーボードイベントが Unicode 文字を表す場合 (たとえば「A」キーを押した場合)、Unicode メンバーにはその文字が格納されます。それ以外の場合、Unicode には値 0 が格納されます。

有効な仮想キー (VK_xxx) コードは XInput.h で定義されています。キーの押下を示すコードに加えて、次のコードはコントローラーの入力を示します。

説明
VK_PAD_A A ボタン
VK_PAD_B B ボタン
VK_PAD_X X ボタン
VK_PAD_Y Y ボタン
VK_PAD_RSHOULDER 右ショルダーボタン
VK_PAD_LSHOULDER 左ショルダーボタン
VK_PAD_LTRIGGER 左トリガー
VK_PAD_RTRIGGER 右トリガー
VK_PAD_DPAD_UP 方向パッド 上
VK_PAD_DPAD_DOWN 方向パッド 下
VK_PAD_DPAD_LEFT 方向パッド 左
VK_PAD_DPAD_RIGHT 方向パッド 右
VK_PAD_START START ボタン
VK_PAD_BACK BACK ボタン
VK_PAD_LTHUMB_PRESS 左スティックのクリック
VK_PAD_RTHUMB_PRESS 右スティックのクリック
VK_PAD_LTHUMB_UP 左スティック 上
VK_PAD_LTHUMB_DOWN 左スティック 下
VK_PAD_LTHUMB_RIGHT 左スティック 右
VK_PAD_LTHUMB_LEFT 左スティック 左
VK_PAD_LTHUMB_UPLEFT 左スティック 左上
VK_PAD_LTHUMB_UPRIGHT 左スティック 右上
VK_PAD_LTHUMB_DOWNRIGHT 左スティック 右下
VK_PAD_LTHUMB_DOWNLEFT 左スティック 左下
VK_PAD_RTHUMB_UP 右スティック 上
VK_PAD_RTHUMB_DOWN 右スティック 下
VK_PAD_RTHUMB_RIGHT 右スティック 右
VK_PAD_RTHUMB_LEFT 右スティック 左
VK_PAD_RTHUMB_UPLEFT 右スティック 左上
VK_PAD_RTHUMB_UPRIGHT 右スティック 右上
VK_PAD_RTHUMB_DOWNRIGHT 右スティック 右下
VK_PAD_RTHUMB_DOWNLEFT 右スティック 左下
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#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