ホーム › Graphics.Printing › MONITOR
MONITOR
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| pfnEnumPorts | PFN_PRINTING_ENUMPORTS | 8/4 | +0 | +0 | ポートを列挙するモニター関数へのポインター。 |
| pfnOpenPort | PFN_PRINTING_OPENPORT | 8/4 | +8 | +4 | ポートを開くモニター関数へのポインター。 |
| pfnOpenPortEx | PFN_PRINTING_OPENPORTEX | 8/4 | +16 | +8 | ポートを拡張形式で開くモニター関数へのポインター。 |
| pfnStartDocPort | PFN_PRINTING_STARTDOCPORT | 8/4 | +24 | +12 | ポートでのドキュメント開始を行う関数へのポインター。 |
| pfnWritePort | PFN_PRINTING_WRITEPORT | 8/4 | +32 | +16 | ポートへの書き込みを行う関数へのポインター。 |
| pfnReadPort | PFN_PRINTING_READPORT | 8/4 | +40 | +20 | ポートからの読み取りを行う関数へのポインター。 |
| pfnEndDocPort | PFN_PRINTING_ENDDOCPORT | 8/4 | +48 | +24 | ポートでのドキュメント終了を行う関数へのポインター。 |
| pfnClosePort | PFN_PRINTING_CLOSEPORT | 8/4 | +56 | +28 | ポートを閉じる関数へのポインター。 |
| pfnAddPort | PFN_PRINTING_ADDPORT | 8/4 | +64 | +32 | ポートを追加する関数へのポインター。 |
| pfnAddPortEx | PFN_PRINTING_ADDPORTEX | 8/4 | +72 | +36 | ポートを拡張形式で追加する関数へのポインター。 |
| pfnConfigurePort | PFN_PRINTING_CONFIGUREPORT | 8/4 | +80 | +40 | ポートを構成する関数へのポインター。 |
| pfnDeletePort | PFN_PRINTING_DELETEPORT | 8/4 | +88 | +44 | ポートを削除する関数へのポインター。 |
| pfnGetPrinterDataFromPort | PFN_PRINTING_GETPRINTERDATAFROMPORT | 8/4 | +96 | +48 | ポートからプリンターデータを取得する関数へのポインター。 |
| pfnSetPortTimeOuts | PFN_PRINTING_SETPORTTIMEOUTS | 8/4 | +104 | +52 | ポートのタイムアウトを設定する関数へのポインター。 |
| pfnXcvOpenPort | PFN_PRINTING_XCVOPENPORT | 8/4 | +112 | +56 | XcvでポートをオープンするためのXcvOpenPort関数へのポインター。 |
| pfnXcvDataPort | PFN_PRINTING_XCVDATAPORT | 8/4 | +120 | +60 | Xcvデータ操作を行うXcvDataPort関数へのポインター。 |
| pfnXcvClosePort | PFN_PRINTING_XCVCLOSEPORT | 8/4 | +128 | +64 | XcvポートをクローズするXcvClosePort関数へのポインター。 |
各言語での定義
#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;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;
}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 Structureimport 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),
]#[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,
}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
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;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,
};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: pointerstruct 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;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x86 レイアウト)
; MONITOR サイズ: 68 バイト(x86)
dim st, 17 ; 4byte整数×17(構造体サイズ 68 / 4 切り上げ)
; pfnEnumPorts : PFN_PRINTING_ENUMPORTS (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; pfnOpenPort : PFN_PRINTING_OPENPORT (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; pfnOpenPortEx : PFN_PRINTING_OPENPORTEX (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; pfnStartDocPort : PFN_PRINTING_STARTDOCPORT (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; pfnWritePort : PFN_PRINTING_WRITEPORT (+16, 4byte) st.4 = 値 / 値 = st.4 (lpoke/lpeek も可)
; pfnReadPort : PFN_PRINTING_READPORT (+20, 4byte) st.5 = 値 / 値 = st.5 (lpoke/lpeek も可)
; pfnEndDocPort : PFN_PRINTING_ENDDOCPORT (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; pfnClosePort : PFN_PRINTING_CLOSEPORT (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; pfnAddPort : PFN_PRINTING_ADDPORT (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; pfnAddPortEx : PFN_PRINTING_ADDPORTEX (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; pfnConfigurePort : PFN_PRINTING_CONFIGUREPORT (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; pfnDeletePort : PFN_PRINTING_DELETEPORT (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; pfnGetPrinterDataFromPort : PFN_PRINTING_GETPRINTERDATAFROMPORT (+48, 4byte) st.12 = 値 / 値 = st.12 (lpoke/lpeek も可)
; pfnSetPortTimeOuts : PFN_PRINTING_SETPORTTIMEOUTS (+52, 4byte) st.13 = 値 / 値 = st.13 (lpoke/lpeek も可)
; pfnXcvOpenPort : PFN_PRINTING_XCVOPENPORT (+56, 4byte) st.14 = 値 / 値 = st.14 (lpoke/lpeek も可)
; pfnXcvDataPort : PFN_PRINTING_XCVDATAPORT (+60, 4byte) st.15 = 値 / 値 = st.15 (lpoke/lpeek も可)
; pfnXcvClosePort : PFN_PRINTING_XCVCLOSEPORT (+64, 4byte) st.16 = 値 / 値 = st.16 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; MONITOR サイズ: 136 バイト(x64)
dim st, 34 ; 4byte整数×34(構造体サイズ 136 / 4 切り上げ)
; pfnEnumPorts : PFN_PRINTING_ENUMPORTS (+0, 8byte) qpoke st,0,値 / qpeek(st,0) ※IronHSPのみ。3.7/3.8は lpoke st,0,下位 : lpoke st,4,上位
; pfnOpenPort : PFN_PRINTING_OPENPORT (+8, 8byte) qpoke st,8,値 / qpeek(st,8) ※IronHSPのみ。3.7/3.8は lpoke st,8,下位 : lpoke st,12,上位
; pfnOpenPortEx : PFN_PRINTING_OPENPORTEX (+16, 8byte) qpoke st,16,値 / qpeek(st,16) ※IronHSPのみ。3.7/3.8は lpoke st,16,下位 : lpoke st,20,上位
; pfnStartDocPort : PFN_PRINTING_STARTDOCPORT (+24, 8byte) qpoke st,24,値 / qpeek(st,24) ※IronHSPのみ。3.7/3.8は lpoke st,24,下位 : lpoke st,28,上位
; pfnWritePort : PFN_PRINTING_WRITEPORT (+32, 8byte) qpoke st,32,値 / qpeek(st,32) ※IronHSPのみ。3.7/3.8は lpoke st,32,下位 : lpoke st,36,上位
; pfnReadPort : PFN_PRINTING_READPORT (+40, 8byte) qpoke st,40,値 / qpeek(st,40) ※IronHSPのみ。3.7/3.8は lpoke st,40,下位 : lpoke st,44,上位
; pfnEndDocPort : PFN_PRINTING_ENDDOCPORT (+48, 8byte) qpoke st,48,値 / qpeek(st,48) ※IronHSPのみ。3.7/3.8は lpoke st,48,下位 : lpoke st,52,上位
; pfnClosePort : PFN_PRINTING_CLOSEPORT (+56, 8byte) qpoke st,56,値 / qpeek(st,56) ※IronHSPのみ。3.7/3.8は lpoke st,56,下位 : lpoke st,60,上位
; pfnAddPort : PFN_PRINTING_ADDPORT (+64, 8byte) qpoke st,64,値 / qpeek(st,64) ※IronHSPのみ。3.7/3.8は lpoke st,64,下位 : lpoke st,68,上位
; pfnAddPortEx : PFN_PRINTING_ADDPORTEX (+72, 8byte) qpoke st,72,値 / qpeek(st,72) ※IronHSPのみ。3.7/3.8は lpoke st,72,下位 : lpoke st,76,上位
; pfnConfigurePort : PFN_PRINTING_CONFIGUREPORT (+80, 8byte) qpoke st,80,値 / qpeek(st,80) ※IronHSPのみ。3.7/3.8は lpoke st,80,下位 : lpoke st,84,上位
; pfnDeletePort : PFN_PRINTING_DELETEPORT (+88, 8byte) qpoke st,88,値 / qpeek(st,88) ※IronHSPのみ。3.7/3.8は lpoke st,88,下位 : lpoke st,92,上位
; pfnGetPrinterDataFromPort : PFN_PRINTING_GETPRINTERDATAFROMPORT (+96, 8byte) qpoke st,96,値 / qpeek(st,96) ※IronHSPのみ。3.7/3.8は lpoke st,96,下位 : lpoke st,100,上位
; pfnSetPortTimeOuts : PFN_PRINTING_SETPORTTIMEOUTS (+104, 8byte) qpoke st,104,値 / qpeek(st,104) ※IronHSPのみ。3.7/3.8は lpoke st,104,下位 : lpoke st,108,上位
; pfnXcvOpenPort : PFN_PRINTING_XCVOPENPORT (+112, 8byte) qpoke st,112,値 / qpeek(st,112) ※IronHSPのみ。3.7/3.8は lpoke st,112,下位 : lpoke st,116,上位
; pfnXcvDataPort : PFN_PRINTING_XCVDATAPORT (+120, 8byte) qpoke st,120,値 / qpeek(st,120) ※IronHSPのみ。3.7/3.8は lpoke st,120,下位 : lpoke st,124,上位
; pfnXcvClosePort : PFN_PRINTING_XCVCLOSEPORT (+128, 8byte) qpoke st,128,値 / qpeek(st,128) ※IronHSPのみ。3.7/3.8は lpoke st,128,下位 : lpoke st,132,上位
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
#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
stdim st, MONITOR ; NSTRUCT 変数を確保