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キーボードデバイスのユニット番号を指定します。キーボードデバイス名は \Device\KeyboardPortN という形式であり、接尾辞 N がそのデバイスのユニット番号です。たとえば、名前が \Device\KeyboardPort0 のデバイスのユニット番号は 0 で、名前が \Device\KeyboardPort1 のデバイスのユニット番号は 1 です。
MakeCodeWORD2+2+2キーの押下に関連付けられたスキャンコードを指定します。
FlagsWORD2+4+4

キーが押されたか離されたか、およびその他の付随情報を示す、次のフラグの 1 つ以上のビット単位の OR を指定します。

Value Meaning
KEY_MAKE キーが押されました。
KEY_BREAK キーが離されました。
KEY_E0 特殊なキーボード機能を示すために使用される拡張スキャンコードです。
KEY_E1 特殊なキーボード機能を示すために使用される拡張スキャンコードです。
ReservedWORD2+6+6オペレーティングシステムが使用するために予約済みです。
ExtraInformationDWORD4+8+8キーボードイベントに関連付けられたデバイス固有の情報を指定します。

公式ドキュメント

KEYBOARD_INPUT_DATA は、キーボード入力データの 1 パケットを格納します。

解説(Remarks)

IRP_MJ_READ (Kbdclass) 要求に応答して、Kbdclass は内部データキューから 0 個以上の KEYBOARD_INPUT_DATA 構造体を Win32 サブシステムのバッファーに転送します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

#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