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

PRINTPROCESSOROPENDATA

構造体
サイズx64: 56 バイト / x86: 28 バイト

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

フィールド

フィールドサイズx64x86説明
pDevModeDEVMODEA*8/4+0+0印刷に使用するDEVMODE構造体へのポインター。
pDatatypeLPWSTR8/4+8+4処理対象のデータ型(RAW等)を指すUnicode文字列。
pParametersLPWSTR8/4+16+8印刷プロセッサに渡すパラメーター文字列を指すUnicode文字列。
pDocumentNameLPWSTR8/4+24+12ドキュメント名を指すUnicode文字列。
JobIdDWORD4+32+16印刷ジョブの識別ID。
pOutputFileLPWSTR8/4+40+20出力先ファイル名を指すUnicode文字列。NULL可。
pPrinterNameLPWSTR8/4+48+24対象プリンター名を指すUnicode文字列。

各言語での定義

#include <windows.h>

// PRINTPROCESSOROPENDATA  (x64 56 / x86 28 バイト)
typedef struct PRINTPROCESSOROPENDATA {
    DEVMODEA* pDevMode;
    LPWSTR pDatatype;
    LPWSTR pParameters;
    LPWSTR pDocumentName;
    DWORD JobId;
    LPWSTR pOutputFile;
    LPWSTR pPrinterName;
} PRINTPROCESSOROPENDATA;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct PRINTPROCESSOROPENDATA
{
    public IntPtr pDevMode;
    public IntPtr pDatatype;
    public IntPtr pParameters;
    public IntPtr pDocumentName;
    public uint JobId;
    public IntPtr pOutputFile;
    public IntPtr pPrinterName;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure PRINTPROCESSOROPENDATA
    Public pDevMode As IntPtr
    Public pDatatype As IntPtr
    Public pParameters As IntPtr
    Public pDocumentName As IntPtr
    Public JobId As UInteger
    Public pOutputFile As IntPtr
    Public pPrinterName As IntPtr
End Structure
import ctypes
from ctypes import wintypes

class PRINTPROCESSOROPENDATA(ctypes.Structure):
    _fields_ = [
        ("pDevMode", ctypes.c_void_p),
        ("pDatatype", ctypes.c_void_p),
        ("pParameters", ctypes.c_void_p),
        ("pDocumentName", ctypes.c_void_p),
        ("JobId", wintypes.DWORD),
        ("pOutputFile", ctypes.c_void_p),
        ("pPrinterName", ctypes.c_void_p),
    ]
#[repr(C)]
pub struct PRINTPROCESSOROPENDATA {
    pub pDevMode: *mut core::ffi::c_void,
    pub pDatatype: *mut core::ffi::c_void,
    pub pParameters: *mut core::ffi::c_void,
    pub pDocumentName: *mut core::ffi::c_void,
    pub JobId: u32,
    pub pOutputFile: *mut core::ffi::c_void,
    pub pPrinterName: *mut core::ffi::c_void,
}
import "golang.org/x/sys/windows"

type PRINTPROCESSOROPENDATA struct {
	pDevMode uintptr
	pDatatype uintptr
	pParameters uintptr
	pDocumentName uintptr
	JobId uint32
	pOutputFile uintptr
	pPrinterName uintptr
}
type
  PRINTPROCESSOROPENDATA = record
    pDevMode: Pointer;
    pDatatype: Pointer;
    pParameters: Pointer;
    pDocumentName: Pointer;
    JobId: DWORD;
    pOutputFile: Pointer;
    pPrinterName: Pointer;
  end;
const PRINTPROCESSOROPENDATA = extern struct {
    pDevMode: ?*anyopaque,
    pDatatype: ?*anyopaque,
    pParameters: ?*anyopaque,
    pDocumentName: ?*anyopaque,
    JobId: u32,
    pOutputFile: ?*anyopaque,
    pPrinterName: ?*anyopaque,
};
type
  PRINTPROCESSOROPENDATA {.bycopy.} = object
    pDevMode: pointer
    pDatatype: pointer
    pParameters: pointer
    pDocumentName: pointer
    JobId: uint32
    pOutputFile: pointer
    pPrinterName: pointer
struct PRINTPROCESSOROPENDATA
{
    void* pDevMode;
    void* pDatatype;
    void* pParameters;
    void* pDocumentName;
    uint JobId;
    void* pOutputFile;
    void* pPrinterName;
}

HSP用 定義

HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; PRINTPROCESSOROPENDATA サイズ: 28 バイト(x86)
dim st, 7    ; 4byte整数×7(構造体サイズ 28 / 4 切り上げ)
; pDevMode : DEVMODEA* (+0, 4byte)  varptr(st)+0 を基点に操作(4byte:入れ子/配列)
; pDatatype : LPWSTR (+4, 4byte)  st.1 = 値  /  値 = st.1   (lpoke/lpeek も可)
; pParameters : LPWSTR (+8, 4byte)  st.2 = 値  /  値 = st.2   (lpoke/lpeek も可)
; pDocumentName : LPWSTR (+12, 4byte)  st.3 = 値  /  値 = st.3   (lpoke/lpeek も可)
; JobId : DWORD (+16, 4byte)  st.4 = 値  /  値 = st.4   (lpoke/lpeek も可)
; pOutputFile : LPWSTR (+20, 4byte)  st.5 = 値  /  値 = st.5   (lpoke/lpeek も可)
; pPrinterName : LPWSTR (+24, 4byte)  st.6 = 値  /  値 = st.6   (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; PRINTPROCESSOROPENDATA サイズ: 56 バイト(x64)
dim st, 14    ; 4byte整数×14(構造体サイズ 56 / 4 切り上げ)
; pDevMode : DEVMODEA* (+0, 8byte)  varptr(st)+0 を基点に操作(8byte:入れ子/配列)
; pDatatype : LPWSTR (+8, 8byte)  qpoke st,8,値 / qpeek(st,8)  ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; pParameters : LPWSTR (+16, 8byte)  qpoke st,16,値 / qpeek(st,16)  ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; pDocumentName : LPWSTR (+24, 8byte)  qpoke st,24,値 / qpeek(st,24)  ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; JobId : DWORD (+32, 4byte)  st.8 = 値  /  値 = st.8   (lpoke/lpeek も可)
; pOutputFile : LPWSTR (+40, 8byte)  qpoke st,40,値 / qpeek(st,40)  ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; pPrinterName : LPWSTR (+48, 8byte)  qpoke st,48,値 / qpeek(st,48)  ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#defstruct global PRINTPROCESSOROPENDATA
    #field intptr pDevMode
    #field intptr pDatatype
    #field intptr pParameters
    #field intptr pDocumentName
    #field int JobId
    #field intptr pOutputFile
    #field intptr pPrinterName
#endstruct

stdim st, PRINTPROCESSOROPENDATA        ; NSTRUCT 変数を確保
st->JobId = 100
mes "JobId=" + st->JobId