ホーム › UI.WindowsAndMessaging › ACCEL
ACCEL
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| fVirt | ACCEL_VIRT_FLAGS | 1 | +0 | +0 | アクセラレータの動作を制御するフラグである(FVIRTKEY、FCONTROL など)。 |
| key | WORD | 2 | +2 | +2 | アクセラレータキー(仮想キーコードまたは文字コード)である。 |
| cmd | WORD | 2 | +4 | +4 | アクセラレータが押されたときに送られるコマンド識別子である。 |
各言語での定義
#include <windows.h>
// ACCEL (x64 6 / x86 6 バイト)
typedef struct ACCEL {
ACCEL_VIRT_FLAGS fVirt;
WORD key;
WORD cmd;
} ACCEL;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct ACCEL
{
public byte fVirt;
public ushort key;
public ushort cmd;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure ACCEL
Public fVirt As Byte
Public key As UShort
Public cmd As UShort
End Structureimport ctypes
from ctypes import wintypes
class ACCEL(ctypes.Structure):
_fields_ = [
("fVirt", ctypes.c_ubyte),
("key", ctypes.c_ushort),
("cmd", ctypes.c_ushort),
]#[repr(C)]
pub struct ACCEL {
pub fVirt: u8,
pub key: u16,
pub cmd: u16,
}import "golang.org/x/sys/windows"
type ACCEL struct {
fVirt byte
key uint16
cmd uint16
}type
ACCEL = record
fVirt: Byte;
key: Word;
cmd: Word;
end;const ACCEL = extern struct {
fVirt: u8,
key: u16,
cmd: u16,
};type
ACCEL {.bycopy.} = object
fVirt: uint8
key: uint16
cmd: uint16struct ACCEL
{
ubyte fVirt;
ushort key;
ushort cmd;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; ACCEL サイズ: 6 バイト(x64)
dim st, 2 ; 4byte整数×2(構造体サイズ 6 / 4 切り上げ)
; fVirt : ACCEL_VIRT_FLAGS (+0, 1byte) poke st,0,値 / 値 = peek(st,0)
; key : WORD (+2, 2byte) wpoke st,2,値 / 値 = wpeek(st,2)
; cmd : WORD (+4, 2byte) wpoke st,4,値 / 値 = wpeek(st,4)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global ACCEL
#field byte fVirt
#field short key
#field short cmd
#endstruct
stdim st, ACCEL ; NSTRUCT 変数を確保
st->fVirt = 100
mes "fVirt=" + st->fVirt