Win32 API 日本語リファレンス
ホームGraphics.Gdi › DEVMODEA

DEVMODEA

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

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

フィールド

フィールドサイズx64x86説明
dmDeviceNameBYTE32+0+0プリンターまたはディスプレイの「フレンドリ名」を指定する、ゼロ終端の文字配列です。たとえば PCL/HP LaserJet の場合は "PCL/HP LaserJet" となります。この文字列はデバイスドライバー間で一意です。この名前は dmDeviceName 配列に収まるように切り詰められる場合がある点に注意してください。
dmSpecVersionWORD2+32+32この構造体の基になっている初期化データ仕様のバージョン番号です。どのオペレーティングシステムでも正しいバージョンが使用されるようにするには、DM_SPECVERSION を使用します。
dmDriverVersionWORD2+34+34ドライバー開発者によって割り当てられたドライバーのバージョン番号です。
dmSizeWORD2+36+36DEVMODE 構造体のサイズをバイト単位で指定します。構造体の公開メンバーの後に続く可能性があるドライバー固有のプライベートデータは含みません。使用している DEVMODE 構造体のバージョンを示すため、このメンバーには sizeof (DEVMODE) を設定します。
dmDriverExtraWORD2+38+38この構造体に続くドライバー固有のプライベートデータのバイト数を格納します。デバイスドライバーがデバイス固有の情報を使用しない場合は、このメンバーに 0 を設定します。
dmFieldsDEVMODE_FIELD_FLAGS4+40+40

DEVMODE 構造体の特定のメンバーが初期化されているかどうかを指定します。メンバーが初期化されている場合は対応するビットが設定され、そうでない場合はビットはクリアされます。ドライバーは、そのプリンターまたはディスプレイ技術に適した DEVMODE メンバーのみをサポートします。

次の値が定義されており、対応する構造体メンバーとともに以下に示します。

構造体メンバー
DM_ORIENTATION dmOrientation
DM_PAPERSIZE dmPaperSize
DM_PAPERLENGTH dmPaperLength
DM_PAPERWIDTH dmPaperWidth
DM_SCALE dmScale
DM_COPIES dmCopies
DM_DEFAULTSOURCE dmDefaultSource
DM_PRINTQUALITY dmPrintQuality
DM_POSITION dmPosition
DM_DISPLAYORIENTATION dmDisplayOrientation
DM_DISPLAYFIXEDOUTPUT dmDisplayFixedOutput
DM_COLOR dmColor
DM_DUPLEX dmDuplex
DM_YRESOLUTION dmYResolution
DM_TTOPTION dmTTOption
DM_COLLATE dmCollate
DM_FORMNAME dmFormName
DM_LOGPIXELS dmLogPixels
DM_BITSPERPEL dmBitsPerPel
DM_PELSWIDTH dmPelsWidth
DM_PELSHEIGHT dmPelsHeight
DM_DISPLAYFLAGS dmDisplayFlags
DM_NUP dmNup
DM_DISPLAYFREQUENCY dmDisplayFrequency
DM_ICMMETHOD dmICMMethod
DM_ICMINTENT dmICMIntent
DM_MEDIATYPE dmMediaType
DM_DITHERTYPE dmDitherType
DM_PANNINGWIDTH dmPanningWidth
DM_PANNINGHEIGHT dmPanningHeight
Anonymous1_Anonymous1_e__Union8/4+48+44印刷の向きや位置などを保持する無名共用体。
dmColorDEVMODE_COLOR2+56+48

カラープリンターでカラーとモノクロを切り替えます。指定できる値は次のとおりです。

dmDuplexDEVMODE_DUPLEX2+58+50

両面印刷が可能なプリンターで、両面印刷を選択します。指定できる値は次のとおりです。

意味
DMDUP_SIMPLEX 通常 (非両面) の印刷です。
DMDUP_HORIZONTAL 短辺とじです。つまり、ページの長辺が水平になります。
DMDUP_VERTICAL 長辺とじです。つまり、ページの長辺が垂直になります。
dmYResolutionSHORT2+60+52プリンターの y 方向の解像度を 1 インチあたりのドット数で指定します。プリンターがこのメンバーを初期化する場合、dmPrintQuality メンバーはプリンターの x 方向の解像度を 1 インチあたりのドット数で指定します。
dmTTOptionDEVMODE_TRUETYPE_OPTION2+62+54

TrueType フォントをどのように印刷するかを指定します。このメンバーには次の値のいずれかを指定できます。

意味
DMTT_BITMAP TrueType フォントをグラフィックスとして印刷します。これはドットマトリックスプリンターの既定の動作です。
DMTT_DOWNLOAD TrueType フォントをソフトフォントとしてダウンロードします。これは Printer Control Language (PCL) を使用する Hewlett-Packard 製プリンターの既定の動作です。
DMTT_DOWNLOAD_OUTLINE TrueType フォントをアウトラインソフトフォントとしてダウンロードします。
DMTT_SUBDEV TrueType フォントをデバイスフォントで置き換えます。これは PostScript プリンターの既定の動作です。
dmCollateDEVMODE_COLLATE2+64+56

複数部数を印刷するときに部単位印刷を使用するかどうかを指定します (このメンバーは、プリンタードライバーが dmFields メンバーに DM_COLLATE を設定して部単位印刷のサポートを示していない限り無視されます)。このメンバーには次の値のいずれかを指定できます。

意味
DMCOLLATE_TRUE 複数部数を印刷するときに部単位で印刷します。
DMCOLLATE_FALSE 複数部数を印刷するときに部単位で印刷しません。
dmFormNameBYTE32+66+58使用するフォームの名前を指定する、ゼロ終端の文字配列です。たとえば "Letter" や "Legal" などです。名前の完全な一覧は EnumForms 関数を使用して取得できます。
dmLogPixelsWORD2+98+90論理インチあたりのピクセル数です。プリンタードライバーはこのメンバーを使用しません。
dmBitsPerPelDWORD4+100+92表示デバイスの色解像度を 1 ピクセルあたりのビット数で指定します (たとえば、16 色なら 4 ビット、256 色なら 8 ビット、65,536 色なら 16 ビット)。表示ドライバーはこのメンバーを、たとえば ChangeDisplaySettings 関数で使用します。プリンタードライバーはこのメンバーを使用しません。
dmPelsWidthDWORD4+104+96可視デバイスサーフェスの幅をピクセル単位で指定します。表示ドライバーはこのメンバーを、たとえば ChangeDisplaySettings 関数で使用します。プリンタードライバーはこのメンバーを使用しません。
dmPelsHeightDWORD4+108+100可視デバイスサーフェスの高さをピクセル単位で指定します。表示ドライバーはこのメンバーを、たとえば ChangeDisplaySettings 関数で使用します。プリンタードライバーはこのメンバーを使用しません。
Anonymous2_Anonymous2_e__Union4+112+104表示フラグやニブル数を保持する無名共用体。
dmDisplayFrequencyDWORD4+116+108

特定のモードにおける表示デバイスの周波数をヘルツ (1 秒あたりのサイクル数) 単位で指定します。この値は、表示デバイスの垂直リフレッシュレートとも呼ばれます。表示ドライバーはこのメンバーを使用します。たとえば ChangeDisplaySettings 関数で使用します。プリンタードライバーはこのメンバーを使用しません。

EnumDisplaySettings 関数を呼び出したとき、dmDisplayFrequency メンバーは値 0 または 1 を返すことがあります。これらの値は、表示ハードウェアの既定のリフレッシュレートを表します。この既定のレートは通常、ディスプレイカードやコンピューターのマザーボード上のスイッチによって設定されるか、ChangeDisplaySettings などの表示関数を使用しない構成プログラムによって設定されます。

dmICMMethodDWORD4+120+112

ICM をどのように処理するかを指定します。ICM 非対応のアプリケーションでは、このメンバーによって ICM を有効にするか無効にするかが決まります。ICM 対応のアプリケーションでは、システムがこのメンバーを調べて ICM サポートの処理方法を判断します。このメンバーには、次の定義済みの値のいずれか、または DMICMMETHOD_USER 以上のドライバー定義の値を指定できます。

意味
DMICMMETHOD_NONE ICM を無効にすることを指定します。
DMICMMETHOD_SYSTEM ICM を Windows が処理することを指定します。
DMICMMETHOD_DRIVER ICM をデバイスドライバーが処理することを指定します。
DMICMMETHOD_DEVICE ICM を出力先デバイスが処理することを指定します。
 

プリンタードライバーは、このメンバーを設定するためのユーザーインターフェイスを提供する必要があります。ほとんどのプリンタードライバーは DMICMMETHOD_SYSTEM または DMICMMETHOD_NONE の値のみをサポートします。PostScript プリンター用のドライバーはすべての値をサポートします。

dmICMIntentDWORD4+124+116

既定で使用する色の一致方法 (インテント) を指定します。このメンバーは主に ICM 非対応のアプリケーション向けです。ICM 対応のアプリケーションは、ICM 関数を使用してインテントを設定できます。このメンバーには、次の定義済みの値のいずれか、または DMICM_USER 以上のドライバー定義の値を指定できます。

意味
DMICM_ABS_COLORIMETRIC ホワイトポイントのマッピングを行わずに、要求された色に正確に一致するよう色の一致処理を最適化します。この値はプルーフ出力に最も適しています。
DMICM_COLORIMETRIC 要求された色に正確に一致するよう色の一致処理を最適化します。この値は、正確な色の一致が必要な企業ロゴなどのイメージに最も適しています。
DMICM_CONTRAST 色のコントラストが最適になるよう色の一致処理を最適化します。この値は、ディザリングを行うスキャン画像や写真画像に最も適した選択です。
DMICM_SATURATE 色の彩度が最適になるよう色の一致処理を最適化します。この値は、ディザリングを行わないビジネスグラフに最も適した選択です。
dmMediaTypeDWORD4+128+120

印刷に使用するメディアの種類を指定します。このメンバーには、次の定義済みの値のいずれか、または DMMEDIA_USER 以上のドライバー定義の値を指定できます。

意味
DMMEDIA_STANDARD 普通紙です。
DMMEDIA_GLOSSY 光沢紙です。
DMMEDIA_TRANSPARENCY 透明フィルムです。
 

プリンターで使用可能なメディアの種類の一覧を取得するには、DeviceCapabilities 関数を DC_MEDIATYPES フラグとともに使用します。

dmDitherTypeDWORD4+132+124

ディザリングをどのように行うかを指定します。このメンバーには、次の定義済みの値のいずれか、または DMDITHER_USER 以上のドライバー定義の値を指定できます。

意味
DMDITHER_NONE ディザリングを行いません。
DMDITHER_COARSE 粗いブラシによるディザリングです。
DMDITHER_FINE 細かいブラシによるディザリングです。
DMDITHER_LINEART ラインアートディザリングです。黒、白、グレースケールの境界を明確に描き出す特殊なディザリング方式です。スキャンした写真のように、明度や色相が連続的に変化するイメージには適していません。
DMDITHER_GRAYSCALE デバイスがグレースケール処理を行います。
dmReserved1DWORD4+136+128使用されません。0 でなければなりません。
dmReserved2DWORD4+140+132使用されません。0 でなければなりません。
dmPanningWidthDWORD4+144+136このメンバーは 0 でなければなりません。
dmPanningHeightDWORD4+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

フィールドサイズx64x86説明
Anonymous1_Anonymous1_e__Struct8/4+0+0印刷の向きや位置などを保持する無名共用体。
Anonymous2_Anonymous2_e__Struct8/4+0+0表示フラグやニブル数を保持する無名共用体。

共用体: _Anonymous2_e__Union x64 4B / x86 4B

フィールドサイズx64x86説明
dmDisplayFlagsDWORD4+0+0

デバイスの表示モードを指定します。このメンバーには次の値の組み合わせを指定できます。

意味
DM_GRAYSCALE ディスプレイが非カラーデバイスであることを指定します。このフラグが設定されていない場合はカラーとみなされます。このフラグは現在では有効ではありません。
DM_INTERLACED 表示モードがインターレースであることを指定します。このフラグが設定されていない場合はノンインターレースとみなされます。
 

表示ドライバーはこのメンバーを、たとえば ChangeDisplaySettings 関数で使用します。プリンタードライバーはこのメンバーを使用しません。

dmNupDWORD4+0+0

NUP (割り付け印刷) をどこで処理するかを指定します。次の値のいずれかを指定できます。

意味
DMNUP_SYSTEM 印刷スプーラーが NUP を行います。
DMNUP_ONEUP アプリケーションが NUP を行います。

公式ドキュメント

DEVMODE データ構造体は、プリンターまたは表示デバイスの初期化と環境に関する情報を格納します。

解説(Remarks)

DEVMODE 構造体の公開部分の後には、デバイスドライバーのプライベートデータが続きます。公開データのサイズは、構造体のバージョンによって異なる場合があります。dmSize メンバーは公開データのバイト数を指定し、dmDriverExtra メンバーはプライベートデータのバイト数を指定します。

メモ

wingdi.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI 版または Unicode 版を自動的に選択するエイリアスとして DEVMODE を定義します。エンコーディング中立のエイリアスと、エンコーディング中立でないコードとを混在させて使用すると、不一致が生じ、コンパイルエラーまたは実行時エラーの原因となることがあります。詳細については、関数プロトタイプの規則 を参照してください。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 Structure
import 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: uint32
struct 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 非対応)。必要に応じ手動でアクセス。