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

MONITOREX

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

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

フィールド

フィールドサイズx64x86説明
dwMonitorSizeDWORD4+0+0後続Monitor構造体のサイズをバイト単位で示す。
MonitorMONITOR136/68+8+4モニター関数群を保持するMONITOR構造体。

各言語での定義

#include <windows.h>

// MONITOR  (x64 136 / x86 68 バイト)
typedef struct MONITOR {
    PFN_PRINTING_ENUMPORTS pfnEnumPorts;
    PFN_PRINTING_OPENPORT pfnOpenPort;
    PFN_PRINTING_OPENPORTEX pfnOpenPortEx;
    PFN_PRINTING_STARTDOCPORT pfnStartDocPort;
    PFN_PRINTING_WRITEPORT pfnWritePort;
    PFN_PRINTING_READPORT pfnReadPort;
    PFN_PRINTING_ENDDOCPORT pfnEndDocPort;
    PFN_PRINTING_CLOSEPORT pfnClosePort;
    PFN_PRINTING_ADDPORT pfnAddPort;
    PFN_PRINTING_ADDPORTEX pfnAddPortEx;
    PFN_PRINTING_CONFIGUREPORT pfnConfigurePort;
    PFN_PRINTING_DELETEPORT pfnDeletePort;
    PFN_PRINTING_GETPRINTERDATAFROMPORT pfnGetPrinterDataFromPort;
    PFN_PRINTING_SETPORTTIMEOUTS pfnSetPortTimeOuts;
    PFN_PRINTING_XCVOPENPORT pfnXcvOpenPort;
    PFN_PRINTING_XCVDATAPORT pfnXcvDataPort;
    PFN_PRINTING_XCVCLOSEPORT pfnXcvClosePort;
} MONITOR;

// MONITOREX  (x64 144 / x86 72 バイト)
typedef struct MONITOREX {
    DWORD dwMonitorSize;
    MONITOR Monitor;
} MONITOREX;
using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MONITOR
{
    public IntPtr pfnEnumPorts;
    public IntPtr pfnOpenPort;
    public IntPtr pfnOpenPortEx;
    public IntPtr pfnStartDocPort;
    public IntPtr pfnWritePort;
    public IntPtr pfnReadPort;
    public IntPtr pfnEndDocPort;
    public IntPtr pfnClosePort;
    public IntPtr pfnAddPort;
    public IntPtr pfnAddPortEx;
    public IntPtr pfnConfigurePort;
    public IntPtr pfnDeletePort;
    public IntPtr pfnGetPrinterDataFromPort;
    public IntPtr pfnSetPortTimeOuts;
    public IntPtr pfnXcvOpenPort;
    public IntPtr pfnXcvDataPort;
    public IntPtr pfnXcvClosePort;
}

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct MONITOREX
{
    public uint dwMonitorSize;
    public MONITOR Monitor;
}
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MONITOR
    Public pfnEnumPorts As IntPtr
    Public pfnOpenPort As IntPtr
    Public pfnOpenPortEx As IntPtr
    Public pfnStartDocPort As IntPtr
    Public pfnWritePort As IntPtr
    Public pfnReadPort As IntPtr
    Public pfnEndDocPort As IntPtr
    Public pfnClosePort As IntPtr
    Public pfnAddPort As IntPtr
    Public pfnAddPortEx As IntPtr
    Public pfnConfigurePort As IntPtr
    Public pfnDeletePort As IntPtr
    Public pfnGetPrinterDataFromPort As IntPtr
    Public pfnSetPortTimeOuts As IntPtr
    Public pfnXcvOpenPort As IntPtr
    Public pfnXcvDataPort As IntPtr
    Public pfnXcvClosePort As IntPtr
End Structure

<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure MONITOREX
    Public dwMonitorSize As UInteger
    Public Monitor As MONITOR
End Structure
import ctypes
from ctypes import wintypes

class MONITOR(ctypes.Structure):
    _fields_ = [
        ("pfnEnumPorts", ctypes.c_void_p),
        ("pfnOpenPort", ctypes.c_void_p),
        ("pfnOpenPortEx", ctypes.c_void_p),
        ("pfnStartDocPort", ctypes.c_void_p),
        ("pfnWritePort", ctypes.c_void_p),
        ("pfnReadPort", ctypes.c_void_p),
        ("pfnEndDocPort", ctypes.c_void_p),
        ("pfnClosePort", ctypes.c_void_p),
        ("pfnAddPort", ctypes.c_void_p),
        ("pfnAddPortEx", ctypes.c_void_p),
        ("pfnConfigurePort", ctypes.c_void_p),
        ("pfnDeletePort", ctypes.c_void_p),
        ("pfnGetPrinterDataFromPort", ctypes.c_void_p),
        ("pfnSetPortTimeOuts", ctypes.c_void_p),
        ("pfnXcvOpenPort", ctypes.c_void_p),
        ("pfnXcvDataPort", ctypes.c_void_p),
        ("pfnXcvClosePort", ctypes.c_void_p),
    ]

class MONITOREX(ctypes.Structure):
    _fields_ = [
        ("dwMonitorSize", wintypes.DWORD),
        ("Monitor", MONITOR),
    ]
#[repr(C)]
pub struct MONITOR {
    pub pfnEnumPorts: *mut core::ffi::c_void,
    pub pfnOpenPort: *mut core::ffi::c_void,
    pub pfnOpenPortEx: *mut core::ffi::c_void,
    pub pfnStartDocPort: *mut core::ffi::c_void,
    pub pfnWritePort: *mut core::ffi::c_void,
    pub pfnReadPort: *mut core::ffi::c_void,
    pub pfnEndDocPort: *mut core::ffi::c_void,
    pub pfnClosePort: *mut core::ffi::c_void,
    pub pfnAddPort: *mut core::ffi::c_void,
    pub pfnAddPortEx: *mut core::ffi::c_void,
    pub pfnConfigurePort: *mut core::ffi::c_void,
    pub pfnDeletePort: *mut core::ffi::c_void,
    pub pfnGetPrinterDataFromPort: *mut core::ffi::c_void,
    pub pfnSetPortTimeOuts: *mut core::ffi::c_void,
    pub pfnXcvOpenPort: *mut core::ffi::c_void,
    pub pfnXcvDataPort: *mut core::ffi::c_void,
    pub pfnXcvClosePort: *mut core::ffi::c_void,
}

#[repr(C)]
pub struct MONITOREX {
    pub dwMonitorSize: u32,
    pub Monitor: MONITOR,
}
import "golang.org/x/sys/windows"

type MONITOR struct {
	pfnEnumPorts uintptr
	pfnOpenPort uintptr
	pfnOpenPortEx uintptr
	pfnStartDocPort uintptr
	pfnWritePort uintptr
	pfnReadPort uintptr
	pfnEndDocPort uintptr
	pfnClosePort uintptr
	pfnAddPort uintptr
	pfnAddPortEx uintptr
	pfnConfigurePort uintptr
	pfnDeletePort uintptr
	pfnGetPrinterDataFromPort uintptr
	pfnSetPortTimeOuts uintptr
	pfnXcvOpenPort uintptr
	pfnXcvDataPort uintptr
	pfnXcvClosePort uintptr
}

type MONITOREX struct {
	dwMonitorSize uint32
	Monitor MONITOR
}
type
  MONITOR = record
    pfnEnumPorts: Pointer;
    pfnOpenPort: Pointer;
    pfnOpenPortEx: Pointer;
    pfnStartDocPort: Pointer;
    pfnWritePort: Pointer;
    pfnReadPort: Pointer;
    pfnEndDocPort: Pointer;
    pfnClosePort: Pointer;
    pfnAddPort: Pointer;
    pfnAddPortEx: Pointer;
    pfnConfigurePort: Pointer;
    pfnDeletePort: Pointer;
    pfnGetPrinterDataFromPort: Pointer;
    pfnSetPortTimeOuts: Pointer;
    pfnXcvOpenPort: Pointer;
    pfnXcvDataPort: Pointer;
    pfnXcvClosePort: Pointer;
  end;

  MONITOREX = record
    dwMonitorSize: DWORD;
    Monitor: MONITOR;
  end;
const MONITOR = extern struct {
    pfnEnumPorts: ?*anyopaque,
    pfnOpenPort: ?*anyopaque,
    pfnOpenPortEx: ?*anyopaque,
    pfnStartDocPort: ?*anyopaque,
    pfnWritePort: ?*anyopaque,
    pfnReadPort: ?*anyopaque,
    pfnEndDocPort: ?*anyopaque,
    pfnClosePort: ?*anyopaque,
    pfnAddPort: ?*anyopaque,
    pfnAddPortEx: ?*anyopaque,
    pfnConfigurePort: ?*anyopaque,
    pfnDeletePort: ?*anyopaque,
    pfnGetPrinterDataFromPort: ?*anyopaque,
    pfnSetPortTimeOuts: ?*anyopaque,
    pfnXcvOpenPort: ?*anyopaque,
    pfnXcvDataPort: ?*anyopaque,
    pfnXcvClosePort: ?*anyopaque,
};

const MONITOREX = extern struct {
    dwMonitorSize: u32,
    Monitor: MONITOR,
};
type
  MONITOR {.bycopy.} = object
    pfnEnumPorts: pointer
    pfnOpenPort: pointer
    pfnOpenPortEx: pointer
    pfnStartDocPort: pointer
    pfnWritePort: pointer
    pfnReadPort: pointer
    pfnEndDocPort: pointer
    pfnClosePort: pointer
    pfnAddPort: pointer
    pfnAddPortEx: pointer
    pfnConfigurePort: pointer
    pfnDeletePort: pointer
    pfnGetPrinterDataFromPort: pointer
    pfnSetPortTimeOuts: pointer
    pfnXcvOpenPort: pointer
    pfnXcvDataPort: pointer
    pfnXcvClosePort: pointer

  MONITOREX {.bycopy.} = object
    dwMonitorSize: uint32
    Monitor: MONITOR
struct MONITOR
{
    void* pfnEnumPorts;
    void* pfnOpenPort;
    void* pfnOpenPortEx;
    void* pfnStartDocPort;
    void* pfnWritePort;
    void* pfnReadPort;
    void* pfnEndDocPort;
    void* pfnClosePort;
    void* pfnAddPort;
    void* pfnAddPortEx;
    void* pfnConfigurePort;
    void* pfnDeletePort;
    void* pfnGetPrinterDataFromPort;
    void* pfnSetPortTimeOuts;
    void* pfnXcvOpenPort;
    void* pfnXcvDataPort;
    void* pfnXcvClosePort;
}

struct MONITOREX
{
    uint dwMonitorSize;
    MONITOR Monitor;
}

HSP用 定義

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

; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; MONITOREX サイズ: 72 バイト(x86)
dim st, 18    ; 4byte整数×18(構造体サイズ 72 / 4 切り上げ)
; dwMonitorSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; Monitor : MONITOR (+4, 68byte)  varptr(st)+4 を基点に操作(68byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; MONITOREX サイズ: 144 バイト(x64)
dim st, 36    ; 4byte整数×36(構造体サイズ 144 / 4 切り上げ)
; dwMonitorSize : DWORD (+0, 4byte)  st.0 = 値  /  値 = st.0   (lpoke/lpeek も可)
; Monitor : MONITOR (+8, 136byte)  varptr(st)+8 を基点に操作(136byte:入れ子/配列)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。
; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global MONITOR
    #field intptr pfnEnumPorts
    #field intptr pfnOpenPort
    #field intptr pfnOpenPortEx
    #field intptr pfnStartDocPort
    #field intptr pfnWritePort
    #field intptr pfnReadPort
    #field intptr pfnEndDocPort
    #field intptr pfnClosePort
    #field intptr pfnAddPort
    #field intptr pfnAddPortEx
    #field intptr pfnConfigurePort
    #field intptr pfnDeletePort
    #field intptr pfnGetPrinterDataFromPort
    #field intptr pfnSetPortTimeOuts
    #field intptr pfnXcvOpenPort
    #field intptr pfnXcvDataPort
    #field intptr pfnXcvClosePort
#endstruct

#defstruct global MONITOREX
    #field int dwMonitorSize
    #field MONITOR Monitor
#endstruct

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