MONITOR2 结构 (winsplp.h)

MONITOR2 结构包含指向打印监视器定义的函数的指针。

语法

typedef struct _MONITOR2 {
  DWORD  cbSize;
  BOOL( )(HANDLE hMonitor,LPWSTR pName,DWORD Level,LPBYTE pPorts,DWORD cbBuf,LPDWORD pcbNeeded,LPDWORD pcReturned)  *pfnEnumPorts;
  BOOL( )(HANDLE hMonitor,LPWSTR pName,PHANDLE pHandle)  *pfnOpenPort;
  BOOL()(HANDLE hMonitor,HANDLE hMonitorPort,LPWSTR pPortName,LPWSTR pPrinterName,PHANDLE pHandle,_MONITOR2 *pMonitor2)  * pfnOpenPortEx;
  BOOL( )(HANDLE hPort,LPWSTR pPrinterName,DWORD JobId,DWORD Level,LPBYTE pDocInfo)  *pfnStartDocPort;
  BOOL( )(HANDLE hPort,LPBYTE pBuffer,DWORD cbBuf,LPDWORD pcbWritten)  *pfnWritePort;
  BOOL( )(HANDLE hPort,LPBYTE pBuffer,DWORD cbBuffer,LPDWORD pcbRead)  *pfnReadPort;
  BOOL( )(HANDLE hPort)  *pfnEndDocPort;
  BOOL( )(HANDLE hPort)  *pfnClosePort;
  BOOL( )(HANDLE hMonitor,LPWSTR pName,HWND hWnd,LPWSTR pMonitorName)  *pfnAddPort;
  BOOL( )(HANDLE hMonitor,LPWSTR pName,DWORD Level,LPBYTE lpBuffer,LPWSTR lpMonitorName)  *pfnAddPortEx;
  BOOL( )(HANDLE hMonitor,LPWSTR pName,HWND hWnd,LPWSTR pPortName)  *pfnConfigurePort;
  BOOL( )(HANDLE hMonitor,LPWSTR pName,HWND hWnd,LPWSTR pPortName)  *pfnDeletePort;
  BOOL( )(HANDLE hPort,DWORD ControlID,LPWSTR pValueName,LPWSTR lpInBuffer,DWORD cbInBuffer,LPWSTR lpOutBuffer,DWORD cbOutBuffer,LPDWORD lpcbReturned)  *pfnGetPrinterDataFromPort;
  BOOL( )(HANDLE hPort,LPCOMMTIMEOUTS lpCTO,DWORD reserved)  *pfnSetPortTimeOuts;
  BOOL( )(HANDLE hMonitor,LPCWSTR pszObject,ACCESS_MASK GrantedAccess,PHANDLE phXcv)  *pfnXcvOpenPort;
  DWORD( )(HANDLE hXcv,LPCWSTR pszDataName,PBYTE pInputData,DWORD cbInputData,PBYTE pOutputData,DWORD cbOutputData,PDWORD pcbOutputNeeded) *pfnXcvDataPort;
  BOOL( )(HANDLE hXcv)  *pfnXcvClosePort;
  VOID( )(HANDLE hMonitor)  *pfnShutdown;
  DWORD()(HANDLE hPort,DWORD dwAccessBit,LPCWSTR pAction,PBIDI_REQUEST_CONTAINER pReqData,PBIDI_RESPONSE_CONTAINER *ppResData) * pfnSendRecvBidiDataFromPort;
  DWORD()(HANDLE hMonitor,DWORD cPorts,PCWSTR *ppszPorts) * pfnNotifyUsedPorts;
  DWORD()(HANDLE hMonitor,DWORD cPorts,PCWSTR *ppszPorts) * pfnNotifyUnusedPorts;
  DWORD()(HANDLE hMonitor,DWORD event,POWERBROADCAST_SETTING *pSettings) * pfnPowerEvent;
} MONITOR2, *PMONITOR2, *LPMONITOR2;

成员

cbSize

指定MONITOR2结构的大小(以字节为单位)。

pfnEnumPorts

端口监视器服务器 DLL 的 EnumPorts 函数枚举端口监视器支持的端口。

pfnOpenPort

指向打印监视器的 OpenPort 函数的指针。

pfnOpenPortEx

语言监视器的 OpenPortEx 函数打开打印机端口。

pfnStartDocPort

打印监视器的 StartDocPort 函数执行在指定端口上启动打印作业所需的任务。

pfnWritePort

指向打印监视器的 WritePort 函数的指针。

pfnReadPort

指向打印监视器的 ReadPort 函数的指针。

pfnEndDocPort

打印监视器的 EndDocPort 函数执行在指定端口上结束打印作业所需的任务。

pfnClosePort

指向打印监视器的 ClosePort 函数的指针。

pfnAddPort

注意

AddPort 函数已过时,不应使用。

AddPort 创建一个端口,并将其添加到后台处理程序环境中指定监视器当前支持的端口列表。

pfnAddPortEx

(已过时。必须为 NULL.) 指向打印监视器的 AddPortEx 函数的指针。 仅 (端口监视器。)

pfnConfigurePort

注意

ConfigurePort 函数已过时,不应使用。 请改用 ConfigurePortUI

ConfigurePort 是配置指定端口的端口管理功能。

pfnDeletePort

注意

DeletePort 函数已过时,不应使用。

DeletePort 从监视器的环境中删除端口。

pfnGetPrinterDataFromPort

指向打印监视器的 GetPrinterDataFromPort 函数的指针。

pfnSetPortTimeOuts

端口监视器服务器 DLL 的 SetPortTimeOuts 函数为打开的端口设置端口超时值。

pfnXcvOpenPort

指向打印监视器的 XcvOpenPort 函数的指针。 仅 (端口监视器。)

pfnXcvDataPort

指向打印监视器的 XcvDataPort 函数的指针。 仅 (端口监视器。)

pfnXcvClosePort

指向打印监视器的 XcvClosePort 函数的指针。 仅 (端口监视器。)

pfnShutdown

指向打印监视器的 Shutdown 函数的指针。

pfnSendRecvBidiDataFromPort

指向打印监视器的 SendRecvBidiDataFromPort 函数的指针。

pfnNotifyUsedPorts

指向打印监视器的 NotifyUsedPorts 函数的 指针。

pfnNotifyUnusedPorts

指向打印监视器的 NotifyUnusedPorts 函数的 指针。

pfnPowerEvent

指向打印监视器的 PowerEvent 函数的指针。

注解

每个语言监视器和每个端口监视器服务器 DLL 都必须提供MONITOR2结构。 监视器必须为所有结构成员提供值,并将结构的地址指定为其 InitializePrintMonitor2 函数的返回值。

如果未定义函数,则其指针必须为 NULL。

Windows XP 中的 MONITOR2 结构比在 Windows 2000 中更大。 为了确保使用 Windows XP 驱动程序开发工具包 (DDK) 开发的监视器安装在 Windows XP 和 Windows 2000 上,监视器必须执行以下操作:

  • 执行运行时检查以确定运行监视器的操作系统版本。
  • 如果监视器在 Windows 2000 上运行,则必须将 MONITOR2 结构的 cbSize 成员设置为 winsplp.h) 中定义的MONITOR2_SIZE_WIN2K (,该大小适用于此结构的 Windows 2000 版本。

以下函数确定当前操作系统版本是否为 Windows 2000。

BOOL  Is_Win2000()
{
  OSVERSIONINFOEX osvi;
  DWORDLONG dwlConditionMask = 0;

  // Initialize the OSVERSIONINFOEX structure.

  ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
  osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
  osvi.dwMajorVersion = 5;
  osvi.dwMinorVersion = 0;

  // Initialize the condition mask.
  VER_SET_CONDITION( dwlConditionMask, VER_MAJORVERSION, VER_EQUAL );
  VER_SET_CONDITION( dwlConditionMask, VER_MINORVERSION, VER_EQUAL );

  // Perform the test.
  return VerifyVersionInfo(
      &osvi,
      VER_MAJORVERSION | VER_MINORVERSION,
      dwlConditionMask);
}

对于正在 Windows 2000 上加载的监视器,以下代码会相应地设置 MONITOR2 结构的 cbSize 成员。

if ( Is_Win2000( ) )
    Monitor2.cbSize = MONITOR2_SIZE_WIN2K;

要求

要求
Header winsplp.h (包括 Winsplp.h)

另请参阅

InitializePrintMonitor2

MONITORUI