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

KEYBOARD_INPUT_DATA

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

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

フィールド

フィールドサイズx64x86説明
UnitIdWORD2+0+0入力元キーボードのユニットID。
MakeCodeWORD2+2+2キーのスキャンコード(メイクコード)。
FlagsWORD2+4+4キーの状態を示すフラグ(押下/離上、拡張キー等)。
ReservedWORD2+6+6予約フィールド。使用しない。
ExtraInformationDWORD4+8+8デバイス固有の追加情報。

各言語での定義

#include <windows.h>

// KEYBOARD_INPUT_DATA  (x64 12 / x86 12 バイト)
typedef struct KEYBOARD_INPUT_DATA {
    WORD UnitId;
    WORD MakeCode;
    WORD Flags;
    WORD Reserved;
    DWORD ExtraInformation;
} KEYBOARD_INPUT_DATA;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct KEYBOARD_INPUT_DATA
{
    public ushort UnitId;
    public ushort MakeCode;
    public ushort Flags;
    public ushort Reserved;
    public uint ExtraInformation;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure KEYBOARD_INPUT_DATA
    Public UnitId As UShort
    Public MakeCode As UShort
    Public Flags As UShort
    Public Reserved As UShort
    Public ExtraInformation As UInteger
End Structure
import ctypes
from ctypes import wintypes

class KEYBOARD_INPUT_DATA(ctypes.Structure):
    _fields_ = [
        ("UnitId", ctypes.c_ushort),
        ("MakeCode", ctypes.c_ushort),
        ("Flags", ctypes.c_ushort),
        ("Reserved", ctypes.c_ushort),
        ("ExtraInformation", wintypes.DWORD),
    ]
#[repr(C)]
pub struct KEYBOARD_INPUT_DATA {
    pub UnitId: u16,
    pub MakeCode: u16,
    pub Flags: u16,
    pub Reserved: u16,
    pub ExtraInformation: u32,
}
import "golang.org/x/sys/windows"

type KEYBOARD_INPUT_DATA struct {
	UnitId uint16
	MakeCode uint16
	Flags uint16
	Reserved uint16
	ExtraInformation uint32
}
type
  KEYBOARD_INPUT_DATA = record
    UnitId: Word;
    MakeCode: Word;
    Flags: Word;
    Reserved: Word;
    ExtraInformation: DWORD;
  end;
const KEYBOARD_INPUT_DATA = extern struct {
    UnitId: u16,
    MakeCode: u16,
    Flags: u16,
    Reserved: u16,
    ExtraInformation: u32,
};
type
  KEYBOARD_INPUT_DATA {.bycopy.} = object
    UnitId: uint16
    MakeCode: uint16
    Flags: uint16
    Reserved: uint16
    ExtraInformation: uint32
struct KEYBOARD_INPUT_DATA
{
    ushort UnitId;
    ushort MakeCode;
    ushort Flags;
    ushort Reserved;
    uint ExtraInformation;
}

HSP用 定義

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

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

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