DEVMODEA
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| dmDeviceName | BYTE | 32 | +0 | +0 | プリンターまたはディスプレイの「フレンドリ名」を指定する、ゼロ終端の文字配列です。たとえば PCL/HP LaserJet の場合は "PCL/HP LaserJet" となります。この文字列はデバイスドライバー間で一意です。この名前は dmDeviceName 配列に収まるように切り詰められる場合がある点に注意してください。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| dmSpecVersion | WORD | 2 | +32 | +32 | この構造体の基になっている初期化データ仕様のバージョン番号です。どのオペレーティングシステムでも正しいバージョンが使用されるようにするには、DM_SPECVERSION を使用します。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| dmDriverVersion | WORD | 2 | +34 | +34 | ドライバー開発者によって割り当てられたドライバーのバージョン番号です。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| dmSize | WORD | 2 | +36 | +36 | DEVMODE 構造体のサイズをバイト単位で指定します。構造体の公開メンバーの後に続く可能性があるドライバー固有のプライベートデータは含みません。使用している DEVMODE 構造体のバージョンを示すため、このメンバーには sizeof (DEVMODE) を設定します。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| dmDriverExtra | WORD | 2 | +38 | +38 | この構造体に続くドライバー固有のプライベートデータのバイト数を格納します。デバイスドライバーがデバイス固有の情報を使用しない場合は、このメンバーに 0 を設定します。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| dmFields | DEVMODE_FIELD_FLAGS | 4 | +40 | +40 | DEVMODE 構造体の特定のメンバーが初期化されているかどうかを指定します。メンバーが初期化されている場合は対応するビットが設定され、そうでない場合はビットはクリアされます。ドライバーは、そのプリンターまたはディスプレイ技術に適した DEVMODE メンバーのみをサポートします。 次の値が定義されており、対応する構造体メンバーとともに以下に示します。
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Anonymous1 | _Anonymous1_e__Union | 8/4 | +48 | +44 | 印刷の向きや位置などを保持する無名共用体。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| dmColor | DEVMODE_COLOR | 2 | +56 | +48 | カラープリンターでカラーとモノクロを切り替えます。指定できる値は次のとおりです。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| dmDuplex | DEVMODE_DUPLEX | 2 | +58 | +50 | 両面印刷が可能なプリンターで、両面印刷を選択します。指定できる値は次のとおりです。
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| dmYResolution | SHORT | 2 | +60 | +52 | プリンターの y 方向の解像度を 1 インチあたりのドット数で指定します。プリンターがこのメンバーを初期化する場合、dmPrintQuality メンバーはプリンターの x 方向の解像度を 1 インチあたりのドット数で指定します。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| dmTTOption | DEVMODE_TRUETYPE_OPTION | 2 | +62 | +54 | TrueType フォントをどのように印刷するかを指定します。このメンバーには次の値のいずれかを指定できます。
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| dmCollate | DEVMODE_COLLATE | 2 | +64 | +56 | 複数部数を印刷するときに部単位印刷を使用するかどうかを指定します (このメンバーは、プリンタードライバーが dmFields メンバーに DM_COLLATE を設定して部単位印刷のサポートを示していない限り無視されます)。このメンバーには次の値のいずれかを指定できます。
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| dmFormName | BYTE | 32 | +66 | +58 | 使用するフォームの名前を指定する、ゼロ終端の文字配列です。たとえば "Letter" や "Legal" などです。名前の完全な一覧は EnumForms 関数を使用して取得できます。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| dmLogPixels | WORD | 2 | +98 | +90 | 論理インチあたりのピクセル数です。プリンタードライバーはこのメンバーを使用しません。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| dmBitsPerPel | DWORD | 4 | +100 | +92 | 表示デバイスの色解像度を 1 ピクセルあたりのビット数で指定します (たとえば、16 色なら 4 ビット、256 色なら 8 ビット、65,536 色なら 16 ビット)。表示ドライバーはこのメンバーを、たとえば ChangeDisplaySettings 関数で使用します。プリンタードライバーはこのメンバーを使用しません。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| dmPelsWidth | DWORD | 4 | +104 | +96 | 可視デバイスサーフェスの幅をピクセル単位で指定します。表示ドライバーはこのメンバーを、たとえば ChangeDisplaySettings 関数で使用します。プリンタードライバーはこのメンバーを使用しません。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| dmPelsHeight | DWORD | 4 | +108 | +100 | 可視デバイスサーフェスの高さをピクセル単位で指定します。表示ドライバーはこのメンバーを、たとえば ChangeDisplaySettings 関数で使用します。プリンタードライバーはこのメンバーを使用しません。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Anonymous2 | _Anonymous2_e__Union | 4 | +112 | +104 | 表示フラグやニブル数を保持する無名共用体。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| dmDisplayFrequency | DWORD | 4 | +116 | +108 | 特定のモードにおける表示デバイスの周波数をヘルツ (1 秒あたりのサイクル数) 単位で指定します。この値は、表示デバイスの垂直リフレッシュレートとも呼ばれます。表示ドライバーはこのメンバーを使用します。たとえば ChangeDisplaySettings 関数で使用します。プリンタードライバーはこのメンバーを使用しません。 EnumDisplaySettings 関数を呼び出したとき、dmDisplayFrequency メンバーは値 0 または 1 を返すことがあります。これらの値は、表示ハードウェアの既定のリフレッシュレートを表します。この既定のレートは通常、ディスプレイカードやコンピューターのマザーボード上のスイッチによって設定されるか、ChangeDisplaySettings などの表示関数を使用しない構成プログラムによって設定されます。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| dmICMMethod | DWORD | 4 | +120 | +112 | ICM をどのように処理するかを指定します。ICM 非対応のアプリケーションでは、このメンバーによって ICM を有効にするか無効にするかが決まります。ICM 対応のアプリケーションでは、システムがこのメンバーを調べて ICM サポートの処理方法を判断します。このメンバーには、次の定義済みの値のいずれか、または DMICMMETHOD_USER 以上のドライバー定義の値を指定できます。
プリンタードライバーは、このメンバーを設定するためのユーザーインターフェイスを提供する必要があります。ほとんどのプリンタードライバーは DMICMMETHOD_SYSTEM または DMICMMETHOD_NONE の値のみをサポートします。PostScript プリンター用のドライバーはすべての値をサポートします。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| dmICMIntent | DWORD | 4 | +124 | +116 | 既定で使用する色の一致方法 (インテント) を指定します。このメンバーは主に ICM 非対応のアプリケーション向けです。ICM 対応のアプリケーションは、ICM 関数を使用してインテントを設定できます。このメンバーには、次の定義済みの値のいずれか、または DMICM_USER 以上のドライバー定義の値を指定できます。
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| dmMediaType | DWORD | 4 | +128 | +120 | 印刷に使用するメディアの種類を指定します。このメンバーには、次の定義済みの値のいずれか、または DMMEDIA_USER 以上のドライバー定義の値を指定できます。
プリンターで使用可能なメディアの種類の一覧を取得するには、DeviceCapabilities 関数を DC_MEDIATYPES フラグとともに使用します。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| dmDitherType | DWORD | 4 | +132 | +124 | ディザリングをどのように行うかを指定します。このメンバーには、次の定義済みの値のいずれか、または DMDITHER_USER 以上のドライバー定義の値を指定できます。
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| dmReserved1 | DWORD | 4 | +136 | +128 | 使用されません。0 でなければなりません。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| dmReserved2 | DWORD | 4 | +140 | +132 | 使用されません。0 でなければなりません。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| dmPanningWidth | DWORD | 4 | +144 | +136 | このメンバーは 0 でなければなりません。 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| dmPanningHeight | DWORD | 4 | +148 | +140 | このメンバーは 0 でなければなりません。 - dmDefaultSource.DMBIN_AUTO- dmDefaultSource.DMBIN_CASSETTE- dmDefaultSource.DMBIN_ENVELOPE- dmDefaultSource.DMBIN_ENVMANUAL- dmDefaultSource.DMBIN_FIRST- dmDefaultSource.DMBIN_FORMSOURCE- dmDefaultSource.DMBIN_LARGECAPACITY- dmDefaultSource.DMBIN_LARGEFMT- dmDefaultSource.DMBIN_LAST- dmDefaultSource.DMBIN_LOWER- dmDefaultSource.DMBIN_MANUAL- dmDefaultSource.DMBIN_MIDDLE- dmDefaultSource.DMBIN_ONLYONE- dmDefaultSource.DMBIN_SMALLFMT- dmDefaultSource.DMBIN_TRACTOR- dmDefaultSource.DMBIN_UPPER- dmPrintQuality.DMRES_DRAFT- dmPrintQuality.DMRES_HIGH- dmPrintQuality.DMRES_LOW- dmPrintQuality.DMRES_MEDIUM |
共用体: _Anonymous1_e__Union x64 8B / x86 4B
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| Anonymous1 | _Anonymous1_e__Struct | 8/4 | +0 | +0 | 印刷の向きや位置などを保持する無名共用体。 |
| Anonymous2 | _Anonymous2_e__Struct | 8/4 | +0 | +0 | 表示フラグやニブル数を保持する無名共用体。 |
共用体: _Anonymous2_e__Union x64 4B / x86 4B
| フィールド | 型 | サイズ | x64 | x86 | 説明 | ||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| dmDisplayFlags | DWORD | 4 | +0 | +0 | デバイスの表示モードを指定します。このメンバーには次の値の組み合わせを指定できます。
表示ドライバーはこのメンバーを、たとえば ChangeDisplaySettings 関数で使用します。プリンタードライバーはこのメンバーを使用しません。 | ||||||
| dmNup | DWORD | 4 | +0 | +0 | NUP (割り付け印刷) をどこで処理するかを指定します。次の値のいずれかを指定できます。
|
公式ドキュメント
DEVMODE データ構造体は、プリンターまたは表示デバイスの初期化と環境に関する情報を格納します。
解説(Remarks)
DEVMODE 構造体の公開部分の後には、デバイスドライバーのプライベートデータが続きます。公開データのサイズは、構造体のバージョンによって異なる場合があります。dmSize メンバーは公開データのバイト数を指定し、dmDriverExtra メンバーはプライベートデータのバイト数を指定します。
wingdi.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI 版または Unicode 版を自動的に選択するエイリアスとして DEVMODE を定義します。エンコーディング中立のエイリアスと、エンコーディング中立でないコードとを混在させて使用すると、不一致が生じ、コンパイルエラーまたは実行時エラーの原因となることがあります。詳細については、関数プロトタイプの規則 を参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#include <windows.h>
// DEVMODEA (x64 152 / x86 144 バイト)
typedef struct DEVMODEA {
BYTE dmDeviceName[32];
WORD dmSpecVersion;
WORD dmDriverVersion;
WORD dmSize;
WORD dmDriverExtra;
DEVMODE_FIELD_FLAGS dmFields;
_Anonymous1_e__Union Anonymous1;
DEVMODE_COLOR dmColor;
DEVMODE_DUPLEX dmDuplex;
SHORT dmYResolution;
DEVMODE_TRUETYPE_OPTION dmTTOption;
DEVMODE_COLLATE dmCollate;
BYTE dmFormName[32];
WORD dmLogPixels;
DWORD dmBitsPerPel;
DWORD dmPelsWidth;
DWORD dmPelsHeight;
_Anonymous2_e__Union Anonymous2;
DWORD dmDisplayFrequency;
DWORD dmICMMethod;
DWORD dmICMIntent;
DWORD dmMediaType;
DWORD dmDitherType;
DWORD dmReserved1;
DWORD dmReserved2;
DWORD dmPanningWidth;
DWORD dmPanningHeight;
} DEVMODEA;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DEVMODEA
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] public byte[] dmDeviceName;
public ushort dmSpecVersion;
public ushort dmDriverVersion;
public ushort dmSize;
public ushort dmDriverExtra;
public uint dmFields;
public _Anonymous1_e__Union Anonymous1;
public short dmColor;
public short dmDuplex;
public short dmYResolution;
public short dmTTOption;
public short dmCollate;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 32)] public byte[] dmFormName;
public ushort dmLogPixels;
public uint dmBitsPerPel;
public uint dmPelsWidth;
public uint dmPelsHeight;
public _Anonymous2_e__Union Anonymous2;
public uint dmDisplayFrequency;
public uint dmICMMethod;
public uint dmICMIntent;
public uint dmMediaType;
public uint dmDitherType;
public uint dmReserved1;
public uint dmReserved2;
public uint dmPanningWidth;
public uint dmPanningHeight;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DEVMODEA
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=32)> Public dmDeviceName() As Byte
Public dmSpecVersion As UShort
Public dmDriverVersion As UShort
Public dmSize As UShort
Public dmDriverExtra As UShort
Public dmFields As UInteger
Public Anonymous1 As _Anonymous1_e__Union
Public dmColor As Short
Public dmDuplex As Short
Public dmYResolution As Short
Public dmTTOption As Short
Public dmCollate As Short
<MarshalAs(UnmanagedType.ByValArray, SizeConst:=32)> Public dmFormName() As Byte
Public dmLogPixels As UShort
Public dmBitsPerPel As UInteger
Public dmPelsWidth As UInteger
Public dmPelsHeight As UInteger
Public Anonymous2 As _Anonymous2_e__Union
Public dmDisplayFrequency As UInteger
Public dmICMMethod As UInteger
Public dmICMIntent As UInteger
Public dmMediaType As UInteger
Public dmDitherType As UInteger
Public dmReserved1 As UInteger
Public dmReserved2 As UInteger
Public dmPanningWidth As UInteger
Public dmPanningHeight As UInteger
End Structureimport ctypes
from ctypes import wintypes
class DEVMODEA(ctypes.Structure):
_fields_ = [
("dmDeviceName", ctypes.c_ubyte * 32),
("dmSpecVersion", ctypes.c_ushort),
("dmDriverVersion", ctypes.c_ushort),
("dmSize", ctypes.c_ushort),
("dmDriverExtra", ctypes.c_ushort),
("dmFields", wintypes.DWORD),
("Anonymous1", _Anonymous1_e__Union),
("dmColor", ctypes.c_short),
("dmDuplex", ctypes.c_short),
("dmYResolution", ctypes.c_short),
("dmTTOption", ctypes.c_short),
("dmCollate", ctypes.c_short),
("dmFormName", ctypes.c_ubyte * 32),
("dmLogPixels", ctypes.c_ushort),
("dmBitsPerPel", wintypes.DWORD),
("dmPelsWidth", wintypes.DWORD),
("dmPelsHeight", wintypes.DWORD),
("Anonymous2", _Anonymous2_e__Union),
("dmDisplayFrequency", wintypes.DWORD),
("dmICMMethod", wintypes.DWORD),
("dmICMIntent", wintypes.DWORD),
("dmMediaType", wintypes.DWORD),
("dmDitherType", wintypes.DWORD),
("dmReserved1", wintypes.DWORD),
("dmReserved2", wintypes.DWORD),
("dmPanningWidth", wintypes.DWORD),
("dmPanningHeight", wintypes.DWORD),
]#[repr(C)]
pub struct DEVMODEA {
pub dmDeviceName: [u8; 32],
pub dmSpecVersion: u16,
pub dmDriverVersion: u16,
pub dmSize: u16,
pub dmDriverExtra: u16,
pub dmFields: u32,
pub Anonymous1: _Anonymous1_e__Union,
pub dmColor: i16,
pub dmDuplex: i16,
pub dmYResolution: i16,
pub dmTTOption: i16,
pub dmCollate: i16,
pub dmFormName: [u8; 32],
pub dmLogPixels: u16,
pub dmBitsPerPel: u32,
pub dmPelsWidth: u32,
pub dmPelsHeight: u32,
pub Anonymous2: _Anonymous2_e__Union,
pub dmDisplayFrequency: u32,
pub dmICMMethod: u32,
pub dmICMIntent: u32,
pub dmMediaType: u32,
pub dmDitherType: u32,
pub dmReserved1: u32,
pub dmReserved2: u32,
pub dmPanningWidth: u32,
pub dmPanningHeight: u32,
}import "golang.org/x/sys/windows"
type DEVMODEA struct {
dmDeviceName [32]byte
dmSpecVersion uint16
dmDriverVersion uint16
dmSize uint16
dmDriverExtra uint16
dmFields uint32
Anonymous1 _Anonymous1_e__Union
dmColor int16
dmDuplex int16
dmYResolution int16
dmTTOption int16
dmCollate int16
dmFormName [32]byte
dmLogPixels uint16
dmBitsPerPel uint32
dmPelsWidth uint32
dmPelsHeight uint32
Anonymous2 _Anonymous2_e__Union
dmDisplayFrequency uint32
dmICMMethod uint32
dmICMIntent uint32
dmMediaType uint32
dmDitherType uint32
dmReserved1 uint32
dmReserved2 uint32
dmPanningWidth uint32
dmPanningHeight uint32
}type
DEVMODEA = record
dmDeviceName: array[0..31] of Byte;
dmSpecVersion: Word;
dmDriverVersion: Word;
dmSize: Word;
dmDriverExtra: Word;
dmFields: DWORD;
Anonymous1: _Anonymous1_e__Union;
dmColor: Smallint;
dmDuplex: Smallint;
dmYResolution: Smallint;
dmTTOption: Smallint;
dmCollate: Smallint;
dmFormName: array[0..31] of Byte;
dmLogPixels: Word;
dmBitsPerPel: DWORD;
dmPelsWidth: DWORD;
dmPelsHeight: DWORD;
Anonymous2: _Anonymous2_e__Union;
dmDisplayFrequency: DWORD;
dmICMMethod: DWORD;
dmICMIntent: DWORD;
dmMediaType: DWORD;
dmDitherType: DWORD;
dmReserved1: DWORD;
dmReserved2: DWORD;
dmPanningWidth: DWORD;
dmPanningHeight: DWORD;
end;const DEVMODEA = extern struct {
dmDeviceName: [32]u8,
dmSpecVersion: u16,
dmDriverVersion: u16,
dmSize: u16,
dmDriverExtra: u16,
dmFields: u32,
Anonymous1: _Anonymous1_e__Union,
dmColor: i16,
dmDuplex: i16,
dmYResolution: i16,
dmTTOption: i16,
dmCollate: i16,
dmFormName: [32]u8,
dmLogPixels: u16,
dmBitsPerPel: u32,
dmPelsWidth: u32,
dmPelsHeight: u32,
Anonymous2: _Anonymous2_e__Union,
dmDisplayFrequency: u32,
dmICMMethod: u32,
dmICMIntent: u32,
dmMediaType: u32,
dmDitherType: u32,
dmReserved1: u32,
dmReserved2: u32,
dmPanningWidth: u32,
dmPanningHeight: u32,
};type
DEVMODEA {.bycopy.} = object
dmDeviceName: array[32, uint8]
dmSpecVersion: uint16
dmDriverVersion: uint16
dmSize: uint16
dmDriverExtra: uint16
dmFields: uint32
Anonymous1: _Anonymous1_e__Union
dmColor: int16
dmDuplex: int16
dmYResolution: int16
dmTTOption: int16
dmCollate: int16
dmFormName: array[32, uint8]
dmLogPixels: uint16
dmBitsPerPel: uint32
dmPelsWidth: uint32
dmPelsHeight: uint32
Anonymous2: _Anonymous2_e__Union
dmDisplayFrequency: uint32
dmICMMethod: uint32
dmICMIntent: uint32
dmMediaType: uint32
dmDitherType: uint32
dmReserved1: uint32
dmReserved2: uint32
dmPanningWidth: uint32
dmPanningHeight: uint32struct DEVMODEA
{
ubyte[32] dmDeviceName;
ushort dmSpecVersion;
ushort dmDriverVersion;
ushort dmSize;
ushort dmDriverExtra;
uint dmFields;
_Anonymous1_e__Union Anonymous1;
short dmColor;
short dmDuplex;
short dmYResolution;
short dmTTOption;
short dmCollate;
ubyte[32] dmFormName;
ushort dmLogPixels;
uint dmBitsPerPel;
uint dmPelsWidth;
uint dmPelsHeight;
_Anonymous2_e__Union Anonymous2;
uint dmDisplayFrequency;
uint dmICMMethod;
uint dmICMIntent;
uint dmMediaType;
uint dmDitherType;
uint dmReserved1;
uint dmReserved2;
uint dmPanningWidth;
uint dmPanningHeight;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; DEVMODEA サイズ: 144 バイト(x86)
dim st, 36 ; 4byte整数×36(構造体サイズ 144 / 4 切り上げ)
; dmDeviceName : BYTE (+0, 32byte) varptr(st)+0 を基点に操作(32byte:入れ子/配列)
; dmSpecVersion : WORD (+32, 2byte) wpoke st,32,値 / 値 = wpeek(st,32)
; dmDriverVersion : WORD (+34, 2byte) wpoke st,34,値 / 値 = wpeek(st,34)
; dmSize : WORD (+36, 2byte) wpoke st,36,値 / 値 = wpeek(st,36)
; dmDriverExtra : WORD (+38, 2byte) wpoke st,38,値 / 値 = wpeek(st,38)
; dmFields : DEVMODE_FIELD_FLAGS (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; Anonymous1 : _Anonymous1_e__Union (+44, 4byte) varptr(st)+44 を基点に操作(4byte:入れ子/配列)
; dmColor : DEVMODE_COLOR (+48, 2byte) wpoke st,48,値 / 値 = wpeek(st,48)
; dmDuplex : DEVMODE_DUPLEX (+50, 2byte) wpoke st,50,値 / 値 = wpeek(st,50)
; dmYResolution : SHORT (+52, 2byte) wpoke st,52,値 / 値 = wpeek(st,52)
; dmTTOption : DEVMODE_TRUETYPE_OPTION (+54, 2byte) wpoke st,54,値 / 値 = wpeek(st,54)
; dmCollate : DEVMODE_COLLATE (+56, 2byte) wpoke st,56,値 / 値 = wpeek(st,56)
; dmFormName : BYTE (+58, 32byte) varptr(st)+58 を基点に操作(32byte:入れ子/配列)
; dmLogPixels : WORD (+90, 2byte) wpoke st,90,値 / 値 = wpeek(st,90)
; dmBitsPerPel : DWORD (+92, 4byte) st.23 = 値 / 値 = st.23 (lpoke/lpeek も可)
; dmPelsWidth : DWORD (+96, 4byte) st.24 = 値 / 値 = st.24 (lpoke/lpeek も可)
; dmPelsHeight : DWORD (+100, 4byte) st.25 = 値 / 値 = st.25 (lpoke/lpeek も可)
; Anonymous2 : _Anonymous2_e__Union (+104, 4byte) varptr(st)+104 を基点に操作(4byte:入れ子/配列)
; dmDisplayFrequency : DWORD (+108, 4byte) st.27 = 値 / 値 = st.27 (lpoke/lpeek も可)
; dmICMMethod : DWORD (+112, 4byte) st.28 = 値 / 値 = st.28 (lpoke/lpeek も可)
; dmICMIntent : DWORD (+116, 4byte) st.29 = 値 / 値 = st.29 (lpoke/lpeek も可)
; dmMediaType : DWORD (+120, 4byte) st.30 = 値 / 値 = st.30 (lpoke/lpeek も可)
; dmDitherType : DWORD (+124, 4byte) st.31 = 値 / 値 = st.31 (lpoke/lpeek も可)
; dmReserved1 : DWORD (+128, 4byte) st.32 = 値 / 値 = st.32 (lpoke/lpeek も可)
; dmReserved2 : DWORD (+132, 4byte) st.33 = 値 / 値 = st.33 (lpoke/lpeek も可)
; dmPanningWidth : DWORD (+136, 4byte) st.34 = 値 / 値 = st.34 (lpoke/lpeek も可)
; dmPanningHeight : DWORD (+140, 4byte) st.35 = 値 / 値 = st.35 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DEVMODEA サイズ: 152 バイト(x64)
dim st, 38 ; 4byte整数×38(構造体サイズ 152 / 4 切り上げ)
; dmDeviceName : BYTE (+0, 32byte) varptr(st)+0 を基点に操作(32byte:入れ子/配列)
; dmSpecVersion : WORD (+32, 2byte) wpoke st,32,値 / 値 = wpeek(st,32)
; dmDriverVersion : WORD (+34, 2byte) wpoke st,34,値 / 値 = wpeek(st,34)
; dmSize : WORD (+36, 2byte) wpoke st,36,値 / 値 = wpeek(st,36)
; dmDriverExtra : WORD (+38, 2byte) wpoke st,38,値 / 値 = wpeek(st,38)
; dmFields : DEVMODE_FIELD_FLAGS (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; Anonymous1 : _Anonymous1_e__Union (+48, 8byte) varptr(st)+48 を基点に操作(8byte:入れ子/配列)
; dmColor : DEVMODE_COLOR (+56, 2byte) wpoke st,56,値 / 値 = wpeek(st,56)
; dmDuplex : DEVMODE_DUPLEX (+58, 2byte) wpoke st,58,値 / 値 = wpeek(st,58)
; dmYResolution : SHORT (+60, 2byte) wpoke st,60,値 / 値 = wpeek(st,60)
; dmTTOption : DEVMODE_TRUETYPE_OPTION (+62, 2byte) wpoke st,62,値 / 値 = wpeek(st,62)
; dmCollate : DEVMODE_COLLATE (+64, 2byte) wpoke st,64,値 / 値 = wpeek(st,64)
; dmFormName : BYTE (+66, 32byte) varptr(st)+66 を基点に操作(32byte:入れ子/配列)
; dmLogPixels : WORD (+98, 2byte) wpoke st,98,値 / 値 = wpeek(st,98)
; dmBitsPerPel : DWORD (+100, 4byte) st.25 = 値 / 値 = st.25 (lpoke/lpeek も可)
; dmPelsWidth : DWORD (+104, 4byte) st.26 = 値 / 値 = st.26 (lpoke/lpeek も可)
; dmPelsHeight : DWORD (+108, 4byte) st.27 = 値 / 値 = st.27 (lpoke/lpeek も可)
; Anonymous2 : _Anonymous2_e__Union (+112, 4byte) varptr(st)+112 を基点に操作(4byte:入れ子/配列)
; dmDisplayFrequency : DWORD (+116, 4byte) st.29 = 値 / 値 = st.29 (lpoke/lpeek も可)
; dmICMMethod : DWORD (+120, 4byte) st.30 = 値 / 値 = st.30 (lpoke/lpeek も可)
; dmICMIntent : DWORD (+124, 4byte) st.31 = 値 / 値 = st.31 (lpoke/lpeek も可)
; dmMediaType : DWORD (+128, 4byte) st.32 = 値 / 値 = st.32 (lpoke/lpeek も可)
; dmDitherType : DWORD (+132, 4byte) st.33 = 値 / 値 = st.33 (lpoke/lpeek も可)
; dmReserved1 : DWORD (+136, 4byte) st.34 = 値 / 値 = st.34 (lpoke/lpeek も可)
; dmReserved2 : DWORD (+140, 4byte) st.35 = 値 / 値 = st.35 (lpoke/lpeek も可)
; dmPanningWidth : DWORD (+144, 4byte) st.36 = 値 / 値 = st.36 (lpoke/lpeek も可)
; dmPanningHeight : DWORD (+148, 4byte) st.37 = 値 / 値 = st.37 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global DEVMODEA
#field byte dmDeviceName 32
#field short dmSpecVersion
#field short dmDriverVersion
#field short dmSize
#field short dmDriverExtra
#field int dmFields
#field byte Anonymous1 8
#field short dmColor
#field short dmDuplex
#field short dmYResolution
#field short dmTTOption
#field short dmCollate
#field byte dmFormName 32
#field short dmLogPixels
#field int dmBitsPerPel
#field int dmPelsWidth
#field int dmPelsHeight
#field byte Anonymous2 4
#field int dmDisplayFrequency
#field int dmICMMethod
#field int dmICMIntent
#field int dmMediaType
#field int dmDitherType
#field int dmReserved1
#field int dmReserved2
#field int dmPanningWidth
#field int dmPanningHeight
#endstruct
stdim st, DEVMODEA ; NSTRUCT 変数を確保
st->dmSpecVersion = 100
mes "dmSpecVersion=" + st->dmSpecVersion
; ※union フィールドは byte 列で確保(NSTRUCT は union 非対応)。必要に応じ手動でアクセス。