ホーム › Graphics.Printing › MONITOREX
MONITOREX
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| dwMonitorSize | DWORD | 4 | +0 | +0 | 後続Monitor構造体のサイズをバイト単位で示す。 |
| Monitor | MONITOR | 136/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 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),
]
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: MONITORstruct 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