Win32 API 日本語リファレンス
ホームUI.WindowsAndMessaging › DEVICE_EVENT_RBC_DATA

DEVICE_EVENT_RBC_DATA

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

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

フィールド

フィールドサイズx64x86説明
EventNumberDWORD4+0+0イベント番号である。
SenseQualifierBYTE1+4+4センスコード修飾子(ASCQ)である。
SenseCodeBYTE1+5+5追加センスコード(ASC)である。
SenseKeyBYTE1+6+6センスキーである。
ReservedBYTE1+7+7予約済みである。使用しない。
InformationDWORD4+8+8イベントに関連付けられた情報フィールドである。

各言語での定義

#include <windows.h>

// DEVICE_EVENT_RBC_DATA  (x64 12 / x86 12 バイト)
typedef struct DEVICE_EVENT_RBC_DATA {
    DWORD EventNumber;
    BYTE SenseQualifier;
    BYTE SenseCode;
    BYTE SenseKey;
    BYTE Reserved;
    DWORD Information;
} DEVICE_EVENT_RBC_DATA;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DEVICE_EVENT_RBC_DATA
{
    public uint EventNumber;
    public byte SenseQualifier;
    public byte SenseCode;
    public byte SenseKey;
    public byte Reserved;
    public uint Information;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DEVICE_EVENT_RBC_DATA
    Public EventNumber As UInteger
    Public SenseQualifier As Byte
    Public SenseCode As Byte
    Public SenseKey As Byte
    Public Reserved As Byte
    Public Information As UInteger
End Structure
import ctypes
from ctypes import wintypes

class DEVICE_EVENT_RBC_DATA(ctypes.Structure):
    _fields_ = [
        ("EventNumber", wintypes.DWORD),
        ("SenseQualifier", ctypes.c_ubyte),
        ("SenseCode", ctypes.c_ubyte),
        ("SenseKey", ctypes.c_ubyte),
        ("Reserved", ctypes.c_ubyte),
        ("Information", wintypes.DWORD),
    ]
#[repr(C)]
pub struct DEVICE_EVENT_RBC_DATA {
    pub EventNumber: u32,
    pub SenseQualifier: u8,
    pub SenseCode: u8,
    pub SenseKey: u8,
    pub Reserved: u8,
    pub Information: u32,
}
import "golang.org/x/sys/windows"

type DEVICE_EVENT_RBC_DATA struct {
	EventNumber uint32
	SenseQualifier byte
	SenseCode byte
	SenseKey byte
	Reserved byte
	Information uint32
}
type
  DEVICE_EVENT_RBC_DATA = record
    EventNumber: DWORD;
    SenseQualifier: Byte;
    SenseCode: Byte;
    SenseKey: Byte;
    Reserved: Byte;
    Information: DWORD;
  end;
const DEVICE_EVENT_RBC_DATA = extern struct {
    EventNumber: u32,
    SenseQualifier: u8,
    SenseCode: u8,
    SenseKey: u8,
    Reserved: u8,
    Information: u32,
};
type
  DEVICE_EVENT_RBC_DATA {.bycopy.} = object
    EventNumber: uint32
    SenseQualifier: uint8
    SenseCode: uint8
    SenseKey: uint8
    Reserved: uint8
    Information: uint32
struct DEVICE_EVENT_RBC_DATA
{
    uint EventNumber;
    ubyte SenseQualifier;
    ubyte SenseCode;
    ubyte SenseKey;
    ubyte Reserved;
    uint Information;
}

HSP用 定義

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

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

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