PRINTDLGEXA
構造体サイズ=各フィールドのバイト数(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 が優先されます。hDC が NULL でない場合は、不要になった時点で DeleteDC を呼び出して GDI オブジェクトを解放する必要があります。そうしないと、 PrintDlgw API を呼び出すたびに GDI オブジェクトがリークします。 | ||||||||||||||||||||||||||||||||||||||||||||
| 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 | LPSTR | 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 配列に格納されているプロパティページハンドルの数です。 | ||||||||||||||||||||||||||||||||||||||||||||
| 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 構造体には、ユーザーが指定した情報が格納されます。 |
公式ドキュメント
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>
// PRINTDLGEXA (x64 120 / x86 84 バイト)
#pragma pack(push, 1)
typedef struct PRINTDLGEXA {
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;
LPSTR lpPrintTemplateName;
IUnknown* lpCallback;
DWORD nPropertyPages;
HPROPSHEETPAGE* lphPropertyPages;
DWORD nStartPage;
DWORD dwResultAction;
} PRINTDLGEXA;
#pragma pack(pop)using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Unicode)]
public struct PRINTDLGEXA
{
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 PRINTDLGEXA
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 PRINTDLGEXA(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 PRINTDLGEXA {
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 PRINTDLGEXA 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
PRINTDLGEXA = 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 PRINTDLGEXA = 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
PRINTDLGEXA {.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 PRINTDLGEXA
{
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 レイアウト)
; PRINTDLGEXA サイズ: 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 : LPSTR (+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 レイアウト)
; PRINTDLGEXA サイズ: 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 : LPSTR (+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 PRINTDLGEXA, 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, PRINTDLGEXA ; NSTRUCT 変数を確保
st->lStructSize = 100
mes "lStructSize=" + st->lStructSize