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
指向打印监视器 关闭 函数的指针。
pfnSendRecvBidiDataFromPort
指向打印监视器的 SendRecvBidiDataFromPort 函数的指针。
pfnNotifyUsedPorts
指向打印监视器的 NotifyUsedPorts 函数的指针。
pfnNotifyUnusedPorts
指向打印监视器的 NotifyUnusedPorts 函数的指针。
pfnPowerEvent
指向打印监视器 PowerEvent 函数的指针。
言论
每个语言监视器和每个端口监视器服务器 DLL 都必须提供MONITOR2结构。 监视器必须为所有结构成员提供值,并将结构的地址指定为其 InitializePrintMonitor2 函数的返回值。
如果未定义函数,则其指针必须为 NULL。
MONITOR2 结构在 Windows XP 中比在 Windows 2000 中更大。 为了确保使用 Windows XP 驱动程序开发工具包(DDK)开发的监视器将安装在 Windows XP 和 Windows 2000 上,监视器必须执行以下作:
- 执行运行时检查以确定监视器正在运行的作系统版本。
- 如果监视器在 Windows 2000 上运行,则必须将MONITOR2结构的 cbSize 成员设置为MONITOR2_SIZE_WIN2K(在 Winsplp.h 中定义),该结构的大小适用于此结构的 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;
要求
| 要求 | 价值 |
|---|---|
| 标头 | winsplp.h (包括 Winsplp.h) |