PRINTDLGEXW
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 | ||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| lStructSize | DWORD | 4 | +0 | +0 | 構造体のサイズ (バイト単位)。 | ||||||||||||||||||||||||||||||||||||||||||||
| hwndOwner | HWND | 8/4 | +4 | +4 | プロパティシートを所有するウィンドウへのハンドル。このメンバーは有効なウィンドウハンドルでなければなりません。NULL にすることはできません。 | ||||||||||||||||||||||||||||||||||||||||||||
| hDevMode | HGLOBAL | 8/4 | +12 | +8 | DEVMODE 構造体を格納する移動可能なグローバルメモリオブジェクトへのハンドル。入力時に hDevMode が NULL でない場合は、DEVMODE 構造体用に移動可能なメモリブロックを割り当て、そのメンバーを初期化する必要があります。PrintDlgEx 関数は、この入力データを使用してプロパティシート内のコントロールを初期化します。PrintDlgEx から制御が戻ると、DEVMODE の各メンバーはユーザーの入力内容を示します。 入力時に hDevMode が NULL の場合、PrintDlgEx は DEVMODE 構造体のメモリを割り当て、そのメンバーをユーザーの入力内容を示すように初期化して、それを識別するハンドルを返します。 hDevMode メンバーと hDevNames メンバーの詳細については、このトピックの末尾にある「解説」セクションを参照してください。 | ||||||||||||||||||||||||||||||||||||||||||||
| hDevNames | HGLOBAL | 8/4 | +20 | +12 | DEVNAMES 構造体を格納する移動可能なグローバルメモリオブジェクトへのハンドル。入力時に hDevNames が NULL でない場合は、DEVNAMES 構造体用に移動可能なメモリブロックを割り当て、そのメンバーを初期化する必要があります。PrintDlgEx 関数は、この入力データを使用してプロパティシート内のコントロールを初期化します。PrintDlgEx から制御が戻ると、DEVNAMES の各メンバーにはユーザーが選択したプリンターの情報が格納されます。この情報を使用して、デバイスコンテキストまたは情報コンテキストを作成できます。 hDevNames メンバーは NULL でもかまいません。その場合、PrintDlgEx は DEVNAMES 構造体のメモリを割り当て、そのメンバーをユーザーの入力内容を示すように初期化して、それを識別するハンドルを返します。 hDevMode メンバーと hDevNames メンバーの詳細については、このトピックの末尾にある「解説」セクションを参照してください。 | ||||||||||||||||||||||||||||||||||||||||||||
| hDC | HDC | 8/4 | +28 | +16 | Flags メンバーで PD_RETURNDC と PC_RETURNIC のどちらのフラグを指定したかに応じた、デバイスコンテキストまたは情報コンテキストへのハンドル。どちらのフラグも指定しなかった場合、このメンバーの値は未定義です。両方のフラグを指定した場合は PD_RETURNDC が優先されます。 | ||||||||||||||||||||||||||||||||||||||||||||
| Flags | PRINTDLGEX_FLAGS | 4 | +36 | +20 | 印刷 プロパティシートの初期化に使用できるビットフラグのセット。PrintDlgEx 関数から制御が戻るときには、ユーザーの入力内容を示すようにこれらのフラグが設定されます。このメンバーには、次の値のうち 1 つ以上を指定できます。 PrintDlg または PrintDlgEx が DEVMODE 構造体の dmCopies メンバーと dmCollate メンバーに正しい値を返すようにするには、PD_RETURNDC = TRUE、PD_USEDEVMODECOPIESANDCOLLATE = TRUE に設定します。この場合、PRINTDLG 構造体の nCopies メンバーは常に 1 になり、PD_COLLATE は常に FALSE になります。 PrintDlg または PrintDlgEx が nCopies と PD_COLLATE に正しい値を返すようにするには、PD_RETURNDC = TRUE、PD_USEDEVMODECOPIESANDCOLLATE = FALSE に設定します。この場合、dmCopies は常に 1 になり、dmCollate は常に FALSE になります。 Windows Vista 以降では、PD_RETURNDC を TRUE、PD_USEDEVMODECOPIESANDCOLLATE を FALSE に設定して PrintDlg または PrintDlgEx を呼び出すと、PrintDlg 関数または PrintDlgEx 関数は PRINTDLG 構造体の nCopies メンバーに部数を設定し、さらに PRINTDLG 構造体の hDC メンバーが表す構造体にも部数を設定します。 GDI を呼び出す際は、同じコピーが重複して印刷されるのを避けるため、nCopies の値を無視して 1 とみなし、返された hDC を使用してください。
| ||||||||||||||||||||||||||||||||||||||||||||
| Flags2 | DWORD | 4 | +40 | +24 | |||||||||||||||||||||||||||||||||||||||||||||
| ExclusionFlags | DWORD | 4 | +44 | +28 | 印刷 プロパティシート内のプリンタードライバーのプロパティページから項目を除外できるビットフラグのセット。この値は、Flags メンバーに PD_EXCLUSIONFLAGS フラグが設定されている場合にのみ使用されます。除外フラグは、除外する項目が 全般 ページ、または 印刷 プロパティシート内のアプリケーション定義のページに含まれる場合にのみ使用してください。このメンバーには次のフラグを指定できます。 PD_EXCL_COPIESANDCOLLATE印刷 プロパティシート内のプリンタードライバーのプロパティページから、部数 コントロールと 部単位で印刷 コントロールを除外します。アプリケーションが 印刷 プロパティシートの 全般 ページ下部にある既定の 部数 コントロールと 部単位で印刷 コントロールを使用する場合は、常にこのフラグを設定してください。 | ||||||||||||||||||||||||||||||||||||||||||||
| nPageRanges | DWORD | 4 | +48 | +32 | 入力時には、lpPageRanges 配列に指定した初期のページ範囲の数をこのメンバーに設定します。PrintDlgEx 関数から制御が戻ると、nPageRanges は lpPageRanges 配列に格納された、ユーザーが指定したページ範囲の数を示します。PD_NOPAGENUMS フラグを指定した場合、この値は有効ではありません。 | ||||||||||||||||||||||||||||||||||||||||||||
| nMaxPageRanges | DWORD | 4 | +52 | +36 | lpPageRanges バッファーのサイズ (配列要素数)。この値は、配列に格納できるページ範囲の最大数を示します。PD_NOPAGENUMS フラグを指定した場合、この値は有効ではありません。PD_NOPAGENUMS フラグを指定しない場合、この値は 0 より大きくなければなりません。 | ||||||||||||||||||||||||||||||||||||||||||||
| lpPageRanges | PRINTPAGERANGE* | 8/4 | +56 | +40 | PRINTPAGERANGE 構造体の配列を格納するバッファーへのポインター。入力時、この配列には ページ指定 編集コントロールに表示する初期のページ範囲を格納します。PrintDlgEx 関数から制御が戻ると、この配列にはユーザーが指定したページ範囲が格納されます。PD_NOPAGENUMS フラグを指定した場合、この値は有効ではありません。PD_NOPAGENUMS フラグを指定しない場合、lpPageRanges は NULL 以外でなければなりません。 | ||||||||||||||||||||||||||||||||||||||||||||
| nMinPage | DWORD | 4 | +64 | +44 | ページ指定 編集コントロールで指定するページ範囲の最小値。PD_NOPAGENUMS フラグを指定した場合、この値は有効ではありません。 | ||||||||||||||||||||||||||||||||||||||||||||
| nMaxPage | DWORD | 4 | +68 | +48 | ページ指定 編集コントロールで指定するページ範囲の最大値。PD_NOPAGENUMS フラグを指定した場合、この値は有効ではありません。 | ||||||||||||||||||||||||||||||||||||||||||||
| nCopies | DWORD | 4 | +72 | +52 | hDevMode が NULL の場合、部数 編集コントロールの初期部数が格納されます。それ以外の場合は、DEVMODE 構造体の dmCopies メンバーに初期値が格納されます。PrintDlgEx から制御が戻ると、nCopies にはアプリケーションが実際に印刷しなければならない部数が格納されます。この値は、複数部の印刷をアプリケーションとプリンタードライバーのどちらが担当するかによって異なります。Flags メンバーに PD_USEDEVMODECOPIESANDCOLLATE フラグが設定されている場合、戻り時の nCopies は常に 1 であり、複数部の印刷はプリンタードライバーが担当します。このフラグが設定されていない場合は、nCopies で指定された部数の印刷をアプリケーションが担当します。詳細については、PD_USEDEVMODECOPIESANDCOLLATE フラグの説明を参照してください。 | ||||||||||||||||||||||||||||||||||||||||||||
| hInstance | HINSTANCE | 8/4 | +76 | +56 | Flags メンバーに PD_ENABLEPRINTTEMPLATE フラグが設定されている場合、hInstance は lpPrintTemplateName メンバーで指定されたダイアログボックステンプレートを含むアプリケーションまたはモジュールのインスタンスへのハンドルです。Flags メンバーに PD_ENABLEPRINTTEMPLATEHANDLE フラグが設定されている場合、hInstance はダイアログボックステンプレートを含むメモリオブジェクトへのハンドルです。Flags メンバーにどちらのテンプレートフラグも設定されていない場合、hInstance は NULL にしてください。 | ||||||||||||||||||||||||||||||||||||||||||||
| lpPrintTemplateName | LPWSTR | 8/4 | +84 | +60 | hInstance メンバーで識別されるモジュール内にあるダイアログボックステンプレートリソースの名前。このテンプレートは、全般 ページ下部の既定のダイアログボックステンプレートを置き換えます。既定のテンプレートには、印刷 ダイアログボックスと同様のコントロールが含まれています。このメンバーは、Flags メンバーに PD_ENABLEPRINTTEMPLATE フラグが設定されていない限り無視されます。 | ||||||||||||||||||||||||||||||||||||||||||||
| lpCallback | IUnknown* | 8/4 | +92 | +64 | アプリケーション定義のコールバックオブジェクトへのポインター。 このオブジェクトは、全般 ページ下部の子ダイアログボックスのメッセージを受け取るために、IPrintDialogCallback クラスを含んでいる必要があります。 また、コールバックオブジェクトは、IPrintDialogServices インターフェイスへのポインターを受け取るために IObjectWithSite クラスも含んでいる必要があります。PrintDlgEx 関数は、どのインターフェイスがサポートされているかを判断するために、コールバックオブジェクトに対して IID_IPrintDialogCallback と IID_IObjectWithSite の両方で IUnknown::QueryInterface を呼び出します。 コールバック情報を取得する必要がない場合は、lpCallback に NULL を設定します。 | ||||||||||||||||||||||||||||||||||||||||||||
| nPropertyPages | DWORD | 4 | +100 | +68 | | ||||||||||||||||||||||||||||||||||||||||||||
| lphPropertyPages | HPROPSHEETPAGE* | 8/4 | +104 | +72 | 印刷 プロパティシートに追加するプロパティページハンドルの配列を格納します。追加のプロパティページは 全般 ページの後に続きます。これらの追加ページを作成するには、CreatePropertySheetPage 関数を使用します。PrintDlgEx 関数から制御が戻った時点で、lphPropertyPages 配列内のすべての HPROPSHEETPAGE ハンドルは破棄されています。nPropertyPages が 0 の場合、lphPropertyPages は NULL にしてください。 | ||||||||||||||||||||||||||||||||||||||||||||
| nStartPage | DWORD | 4 | +112 | +76 | 最初に表示されるプロパティページ。全般 ページを表示するには START_PAGE_GENERAL を指定します。それ以外の場合は、lphPropertyPages メンバーで指定した配列内のプロパティページの、0 から始まるインデックスを指定します。一貫性のため、プロパティシートは常に 全般 ページから開始することをお勧めします。 | ||||||||||||||||||||||||||||||||||||||||||||
| dwResultAction | DWORD | 4 | +116 | +80 | 入力時には、このメンバーに 0 を設定します。PrintDlgEx 関数が S_OK を返した場合、dwResultAction にはダイアログの結果が格納されます。PrintDlgEx がエラーを返した場合、このメンバーは無視してください。dwResultAction メンバーは次のいずれかの値になります。 PD_RESULT_APPLYユーザーが 適用 ボタンをクリックし、その後 キャンセル ボタンをクリックしました。これは、ユーザーがプロパティシートで行った変更を適用したいが、まだ印刷は行いたくないことを示します。PRINTDLGEX 構造体には、適用 ボタンがクリックされた時点でユーザーが指定した情報が格納されます。 PD_RESULT_CANCELユーザーが キャンセル ボタンをクリックしました。PRINTDLGEX 構造体の情報は変更されていません。 PD_RESULT_PRINTユーザーが 印刷 ボタンをクリックしました。PRINTDLGEX 構造体には、ユーザーが指定した情報が格納されます。 - ExclusionFlags.PD_EXCL_COPIESANDCOLLATE印刷 プロパティシート内のプリンタードライバーのプロパティページから、部数 コントロールと 部単位で印刷 コントロールを除外します。アプリケーションが 印刷 プロパティシートの 全般 ページ下部にある既定の 部数 コントロールと 部単位で印刷 コントロールを使用する場合は、常にこのフラグを設定してください。 - dwResultAction.PD_RESULT_APPLYユーザーが 適用 ボタンをクリックし、その後 キャンセル ボタンをクリックしました。これは、ユーザーがプロパティシートで行った変更を適用したいが、まだ印刷は行いたくないことを示します。PRINTDLGEX 構造体には、適用 ボタンがクリックされた時点でユーザーが指定した情報が格納されます。 - dwResultAction.PD_RESULT_CANCELユーザーが キャンセル ボタンをクリックしました。PRINTDLGEX 構造体の情報は変更されていません。 - dwResultAction.PD_RESULT_PRINTユーザーが 印刷 ボタンをクリックしました。PRINTDLGEX 構造体には、ユーザーが指定した情報が格納されます。 |
公式ドキュメント
PrintDlgEx 関数が 印刷プロパティシート を初期化するために使用する情報を格納します。ユーザーがプロパティシートを閉じた後、システムはこの構造体を使用してユーザーの選択内容に関する情報を返します。
解説(Remarks)
hDevMode と hDevNames の両方が NULL の場合、PrintDlgEx は現在の既定のプリンターを使用してプロパティシートを初期化します。別のプリンター用にプロパティシートを初期化するには、DEVNAMES 構造体の wDeviceOffset メンバーでプリンター名を指定します。
なお、DEVMODE 構造体の dmDeviceName メンバーでもプリンター名を指定できます。ただし、dmDeviceName は 32 文字までに制限されているのに対し、wDeviceOffset の名前には制限がありません。wDeviceOffset と dmDeviceName の名前が異なる場合、PrintDlgEx は wDeviceOffset で指定されたプリンターを使用してプロパティシートを初期化します。
PD_RETURNDEFAULT フラグが設定されていて、hDevMode と hDevNames の両方が NULL の場合、PrintDlgEx はダイアログボックスを表示せずに、hDevNames メンバーと hDevMode メンバーを使用して現在の既定のプリンターに関する情報を返します。
PrintDlgEx の実行中、PRINTDLGEX 構造体で指定した DEVMODE 構造体と DEVNAMES 構造体には、常に最新のデータが格納されているとは限りません。そのため、アプリケーション独自のプロパティページや、最初のページ用の IPrintDialogCallback ルーチンでは、現在のプリンターの状態に関する情報を取得するために IPrintDialogServices インターフェイスを使用してください。
commdlg.h ヘッダーは、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI 版または Unicode 版を自動的に選択するエイリアスとして PRINTDLGEX を定義しています。エンコーディング中立のエイリアスと、エンコーディング中立でないコードを混在させて使用すると、不一致が生じてコンパイルエラーや実行時エラーの原因となる可能性があります。詳細については、Conventions for Function Prototypes を参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#include <windows.h>
// PRINTDLGEXW (x64 120 / x86 84 バイト)
#pragma pack(push, 1)
typedef struct PRINTDLGEXW {
DWORD lStructSize;
HWND hwndOwner;
HGLOBAL hDevMode;
HGLOBAL hDevNames;
HDC hDC;
PRINTDLGEX_FLAGS Flags;
DWORD Flags2;
DWORD ExclusionFlags;
DWORD nPageRanges;
DWORD nMaxPageRanges;
PRINTPAGERANGE* lpPageRanges;
DWORD nMinPage;
DWORD nMaxPage;
DWORD nCopies;
HINSTANCE hInstance;
LPWSTR lpPrintTemplateName;
IUnknown* lpCallback;
DWORD nPropertyPages;
HPROPSHEETPAGE* lphPropertyPages;
DWORD nStartPage;
DWORD dwResultAction;
} PRINTDLGEXW;
#pragma pack(pop)using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct PRINTDLGEXW
{
public uint lStructSize;
public IntPtr hwndOwner;
public IntPtr hDevMode;
public IntPtr hDevNames;
public IntPtr hDC;
public uint Flags;
public uint Flags2;
public uint ExclusionFlags;
public uint nPageRanges;
public uint nMaxPageRanges;
public IntPtr lpPageRanges;
public uint nMinPage;
public uint nMaxPage;
public uint nCopies;
public IntPtr hInstance;
public IntPtr lpPrintTemplateName;
public IntPtr lpCallback;
public uint nPropertyPages;
public IntPtr lphPropertyPages;
public uint nStartPage;
public uint dwResultAction;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, Pack:=1, CharSet:=CharSet.Unicode)>
Public Structure PRINTDLGEXW
Public lStructSize As UInteger
Public hwndOwner As IntPtr
Public hDevMode As IntPtr
Public hDevNames As IntPtr
Public hDC As IntPtr
Public Flags As UInteger
Public Flags2 As UInteger
Public ExclusionFlags As UInteger
Public nPageRanges As UInteger
Public nMaxPageRanges As UInteger
Public lpPageRanges As IntPtr
Public nMinPage As UInteger
Public nMaxPage As UInteger
Public nCopies As UInteger
Public hInstance As IntPtr
Public lpPrintTemplateName As IntPtr
Public lpCallback As IntPtr
Public nPropertyPages As UInteger
Public lphPropertyPages As IntPtr
Public nStartPage As UInteger
Public dwResultAction As UInteger
End Structureimport ctypes
from ctypes import wintypes
class PRINTDLGEXW(ctypes.Structure):
_pack_ = 1
_fields_ = [
("lStructSize", wintypes.DWORD),
("hwndOwner", ctypes.c_void_p),
("hDevMode", ctypes.c_void_p),
("hDevNames", ctypes.c_void_p),
("hDC", ctypes.c_void_p),
("Flags", wintypes.DWORD),
("Flags2", wintypes.DWORD),
("ExclusionFlags", wintypes.DWORD),
("nPageRanges", wintypes.DWORD),
("nMaxPageRanges", wintypes.DWORD),
("lpPageRanges", ctypes.c_void_p),
("nMinPage", wintypes.DWORD),
("nMaxPage", wintypes.DWORD),
("nCopies", wintypes.DWORD),
("hInstance", ctypes.c_void_p),
("lpPrintTemplateName", ctypes.c_void_p),
("lpCallback", ctypes.c_void_p),
("nPropertyPages", wintypes.DWORD),
("lphPropertyPages", ctypes.c_void_p),
("nStartPage", wintypes.DWORD),
("dwResultAction", wintypes.DWORD),
]#[repr(C, packed(1))]
pub struct PRINTDLGEXW {
pub lStructSize: u32,
pub hwndOwner: *mut core::ffi::c_void,
pub hDevMode: *mut core::ffi::c_void,
pub hDevNames: *mut core::ffi::c_void,
pub hDC: *mut core::ffi::c_void,
pub Flags: u32,
pub Flags2: u32,
pub ExclusionFlags: u32,
pub nPageRanges: u32,
pub nMaxPageRanges: u32,
pub lpPageRanges: *mut core::ffi::c_void,
pub nMinPage: u32,
pub nMaxPage: u32,
pub nCopies: u32,
pub hInstance: *mut core::ffi::c_void,
pub lpPrintTemplateName: *mut core::ffi::c_void,
pub lpCallback: *mut core::ffi::c_void,
pub nPropertyPages: u32,
pub lphPropertyPages: *mut core::ffi::c_void,
pub nStartPage: u32,
pub dwResultAction: u32,
}import "golang.org/x/sys/windows"
type PRINTDLGEXW struct {
lStructSize uint32
hwndOwner uintptr
hDevMode uintptr
hDevNames uintptr
hDC uintptr
Flags uint32
Flags2 uint32
ExclusionFlags uint32
nPageRanges uint32
nMaxPageRanges uint32
lpPageRanges uintptr
nMinPage uint32
nMaxPage uint32
nCopies uint32
hInstance uintptr
lpPrintTemplateName uintptr
lpCallback uintptr
nPropertyPages uint32
lphPropertyPages uintptr
nStartPage uint32
dwResultAction uint32
}type
PRINTDLGEXW = packed record
lStructSize: DWORD;
hwndOwner: Pointer;
hDevMode: Pointer;
hDevNames: Pointer;
hDC: Pointer;
Flags: DWORD;
Flags2: DWORD;
ExclusionFlags: DWORD;
nPageRanges: DWORD;
nMaxPageRanges: DWORD;
lpPageRanges: Pointer;
nMinPage: DWORD;
nMaxPage: DWORD;
nCopies: DWORD;
hInstance: Pointer;
lpPrintTemplateName: Pointer;
lpCallback: Pointer;
nPropertyPages: DWORD;
lphPropertyPages: Pointer;
nStartPage: DWORD;
dwResultAction: DWORD;
end;const PRINTDLGEXW = extern struct {
lStructSize: u32,
hwndOwner: ?*anyopaque,
hDevMode: ?*anyopaque,
hDevNames: ?*anyopaque,
hDC: ?*anyopaque,
Flags: u32,
Flags2: u32,
ExclusionFlags: u32,
nPageRanges: u32,
nMaxPageRanges: u32,
lpPageRanges: ?*anyopaque,
nMinPage: u32,
nMaxPage: u32,
nCopies: u32,
hInstance: ?*anyopaque,
lpPrintTemplateName: ?*anyopaque,
lpCallback: ?*anyopaque,
nPropertyPages: u32,
lphPropertyPages: ?*anyopaque,
nStartPage: u32,
dwResultAction: u32,
};type
PRINTDLGEXW {.packed.} = object
lStructSize: uint32
hwndOwner: pointer
hDevMode: pointer
hDevNames: pointer
hDC: pointer
Flags: uint32
Flags2: uint32
ExclusionFlags: uint32
nPageRanges: uint32
nMaxPageRanges: uint32
lpPageRanges: pointer
nMinPage: uint32
nMaxPage: uint32
nCopies: uint32
hInstance: pointer
lpPrintTemplateName: pointer
lpCallback: pointer
nPropertyPages: uint32
lphPropertyPages: pointer
nStartPage: uint32
dwResultAction: uint32align(1)
struct PRINTDLGEXW
{
uint lStructSize;
void* hwndOwner;
void* hDevMode;
void* hDevNames;
void* hDC;
uint Flags;
uint Flags2;
uint ExclusionFlags;
uint nPageRanges;
uint nMaxPageRanges;
void* lpPageRanges;
uint nMinPage;
uint nMaxPage;
uint nCopies;
void* hInstance;
void* lpPrintTemplateName;
void* lpCallback;
uint nPropertyPages;
void* lphPropertyPages;
uint nStartPage;
uint dwResultAction;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; PRINTDLGEXW サイズ: 84 バイト(x86)
dim st, 21 ; 4byte整数×21(構造体サイズ 84 / 4 切り上げ)
; lStructSize : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; hwndOwner : HWND (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; hDevMode : HGLOBAL (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; hDevNames : HGLOBAL (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; hDC : HDC (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; Flags : PRINTDLGEX_FLAGS (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; Flags2 : DWORD (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; ExclusionFlags : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; nPageRanges : DWORD (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; nMaxPageRanges : DWORD (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; lpPageRanges : PRINTPAGERANGE* (+40, 4byte) varptr(st)+40 を基点に操作(4byte:入れ子/配列)
; nMinPage : DWORD (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; nMaxPage : DWORD (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; nCopies : DWORD (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; hInstance : HINSTANCE (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; lpPrintTemplateName : LPWSTR (+60, 4byte) st.15 = 値 / 値 = st.15 (lpoke/lpeek も可)
; lpCallback : IUnknown* (+64, 4byte) st.16 = 値 / 値 = st.16 (lpoke/lpeek も可)
; nPropertyPages : DWORD (+68, 4byte) st.17 = 値 / 値 = st.17 (lpoke/lpeek も可)
; lphPropertyPages : HPROPSHEETPAGE* (+72, 4byte) st.18 = 値 / 値 = st.18 (lpoke/lpeek も可)
; nStartPage : DWORD (+76, 4byte) st.19 = 値 / 値 = st.19 (lpoke/lpeek も可)
; dwResultAction : DWORD (+80, 4byte) st.20 = 値 / 値 = st.20 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; PRINTDLGEXW サイズ: 120 バイト(x64)
dim st, 30 ; 4byte整数×30(構造体サイズ 120 / 4 切り上げ)
; lStructSize : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; hwndOwner : HWND (+4, 8byte) qpoke st,4,値 / qpeek(st,4) ※IronHSPのみ。3.7/3.8は lpoke st,4,下位 : lpoke st,8,上位
; hDevMode : HGLOBAL (+12, 8byte) qpoke st,12,値 / qpeek(st,12) ※IronHSPのみ。3.7/3.8は lpoke st,12,下位 : lpoke st,16,上位
; hDevNames : HGLOBAL (+20, 8byte) qpoke st,20,値 / qpeek(st,20) ※IronHSPのみ。3.7/3.8は lpoke st,20,下位 : lpoke st,24,上位
; hDC : HDC (+28, 8byte) qpoke st,28,値 / qpeek(st,28) ※IronHSPのみ。3.7/3.8は lpoke st,28,下位 : lpoke st,32,上位
; Flags : PRINTDLGEX_FLAGS (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; Flags2 : DWORD (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; ExclusionFlags : DWORD (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; nPageRanges : DWORD (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; nMaxPageRanges : DWORD (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; lpPageRanges : PRINTPAGERANGE* (+56, 8byte) varptr(st)+56 を基点に操作(8byte:入れ子/配列)
; nMinPage : DWORD (+64, 4byte) st.16 = 値 / 値 = st.16 (lpoke/lpeek も可)
; nMaxPage : DWORD (+68, 4byte) st.17 = 値 / 値 = st.17 (lpoke/lpeek も可)
; nCopies : DWORD (+72, 4byte) st.18 = 値 / 値 = st.18 (lpoke/lpeek も可)
; hInstance : HINSTANCE (+76, 8byte) qpoke st,76,値 / qpeek(st,76) ※IronHSPのみ。3.7/3.8は lpoke st,76,下位 : lpoke st,80,上位
; lpPrintTemplateName : LPWSTR (+84, 8byte) qpoke st,84,値 / qpeek(st,84) ※IronHSPのみ。3.7/3.8は lpoke st,84,下位 : lpoke st,88,上位
; lpCallback : IUnknown* (+92, 8byte) qpoke st,92,値 / qpeek(st,92) ※IronHSPのみ。3.7/3.8は lpoke st,92,下位 : lpoke st,96,上位
; nPropertyPages : DWORD (+100, 4byte) st.25 = 値 / 値 = st.25 (lpoke/lpeek も可)
; lphPropertyPages : HPROPSHEETPAGE* (+104, 8byte) qpoke st,104,値 / qpeek(st,104) ※IronHSPのみ。3.7/3.8は lpoke st,104,下位 : lpoke st,108,上位
; nStartPage : DWORD (+112, 4byte) st.28 = 値 / 値 = st.28 (lpoke/lpeek も可)
; dwResultAction : DWORD (+116, 4byte) st.29 = 値 / 値 = st.29 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global PRINTDLGEXW, pack=1
#field int lStructSize
#field intptr hwndOwner
#field intptr hDevMode
#field intptr hDevNames
#field intptr hDC
#field int Flags
#field int Flags2
#field int ExclusionFlags
#field int nPageRanges
#field int nMaxPageRanges
#field intptr lpPageRanges
#field int nMinPage
#field int nMaxPage
#field int nCopies
#field intptr hInstance
#field intptr lpPrintTemplateName
#field intptr lpCallback
#field int nPropertyPages
#field intptr lphPropertyPages
#field int nStartPage
#field int dwResultAction
#endstruct
stdim st, PRINTDLGEXW ; NSTRUCT 変数を確保
st->lStructSize = 100
mes "lStructSize=" + st->lStructSize