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

GameInputKeyboardInfo

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

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

フィールド

フィールドサイズx64x86説明
kindGameInputKeyboardKind4+0+0キーボードの種別を示す値である。
layoutDWORD4+4+4キーボードレイアウトの識別子である。
keyCountDWORD4+8+8キーの総数である。
functionKeyCountDWORD4+12+12ファンクションキーの数である。
maxSimultaneousKeysDWORD4+16+16同時押し可能な最大キー数である。
platformTypeDWORD4+20+20プラットフォーム種別を示す値である。
platformSubtypeDWORD4+24+24プラットフォームのサブ種別を示す値である。
nativeLanguageGameInputString*8/4+32+28ネイティブ言語名を示す文字列情報へのポインタである。

各言語での定義

#include <windows.h>

// GameInputKeyboardInfo  (x64 40 / x86 32 バイト)
typedef struct GameInputKeyboardInfo {
    GameInputKeyboardKind kind;
    DWORD layout;
    DWORD keyCount;
    DWORD functionKeyCount;
    DWORD maxSimultaneousKeys;
    DWORD platformType;
    DWORD platformSubtype;
    GameInputString* nativeLanguage;
} GameInputKeyboardInfo;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct GameInputKeyboardInfo
{
    public int kind;
    public uint layout;
    public uint keyCount;
    public uint functionKeyCount;
    public uint maxSimultaneousKeys;
    public uint platformType;
    public uint platformSubtype;
    public IntPtr nativeLanguage;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure GameInputKeyboardInfo
    Public kind As Integer
    Public layout As UInteger
    Public keyCount As UInteger
    Public functionKeyCount As UInteger
    Public maxSimultaneousKeys As UInteger
    Public platformType As UInteger
    Public platformSubtype As UInteger
    Public nativeLanguage As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class GameInputKeyboardInfo(ctypes.Structure):
    _fields_ = [
        ("kind", ctypes.c_int),
        ("layout", wintypes.DWORD),
        ("keyCount", wintypes.DWORD),
        ("functionKeyCount", wintypes.DWORD),
        ("maxSimultaneousKeys", wintypes.DWORD),
        ("platformType", wintypes.DWORD),
        ("platformSubtype", wintypes.DWORD),
        ("nativeLanguage", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct GameInputKeyboardInfo {
    pub kind: i32,
    pub layout: u32,
    pub keyCount: u32,
    pub functionKeyCount: u32,
    pub maxSimultaneousKeys: u32,
    pub platformType: u32,
    pub platformSubtype: u32,
    pub nativeLanguage: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type GameInputKeyboardInfo struct {
	kind int32
	layout uint32
	keyCount uint32
	functionKeyCount uint32
	maxSimultaneousKeys uint32
	platformType uint32
	platformSubtype uint32
	nativeLanguage uintptr
}
type
  GameInputKeyboardInfo = record
    kind: Integer;
    layout: DWORD;
    keyCount: DWORD;
    functionKeyCount: DWORD;
    maxSimultaneousKeys: DWORD;
    platformType: DWORD;
    platformSubtype: DWORD;
    nativeLanguage: Pointer;
  end;
const GameInputKeyboardInfo = extern struct {
    kind: i32,
    layout: u32,
    keyCount: u32,
    functionKeyCount: u32,
    maxSimultaneousKeys: u32,
    platformType: u32,
    platformSubtype: u32,
    nativeLanguage: ?*anyopaque,
};
type
  GameInputKeyboardInfo {.bycopy.} = object
    kind: int32
    layout: uint32
    keyCount: uint32
    functionKeyCount: uint32
    maxSimultaneousKeys: uint32
    platformType: uint32
    platformSubtype: uint32
    nativeLanguage: pointer
struct GameInputKeyboardInfo
{
    int kind;
    uint layout;
    uint keyCount;
    uint functionKeyCount;
    uint maxSimultaneousKeys;
    uint platformType;
    uint platformSubtype;
    void* nativeLanguage;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; GameInputKeyboardInfo サイズ: 32 バイト(x86)
dim st, 8    ; 4byte整数×8(構造体サイズ 32 / 4 切り上げ)
; kind : GameInputKeyboardKind (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; layout : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; keyCount : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; functionKeyCount : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; maxSimultaneousKeys : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; platformType : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; platformSubtype : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; nativeLanguage : GameInputString* (+28, 4byte)  varptr(st)+28 を基点に操作(4byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; GameInputKeyboardInfo サイズ: 40 バイト(x64)
dim st, 10    ; 4byte整数×10(構造体サイズ 40 / 4 切り上げ)
; kind : GameInputKeyboardKind (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; layout : DWORD (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; keyCount : DWORD (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; functionKeyCount : DWORD (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; maxSimultaneousKeys : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; platformType : DWORD (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; platformSubtype : DWORD (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; nativeLanguage : GameInputString* (+32, 8byte)  varptr(st)+32 を基点に操作(8byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global GameInputKeyboardInfo
    #field int kind
    #field int layout
    #field int keyCount
    #field int functionKeyCount
    #field int maxSimultaneousKeys
    #field int platformType
    #field int platformSubtype
    #field intptr nativeLanguage
#endstruct

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