GetPrinterData 函数

GetPrinterData 函数检索指定打印机或打印服务器的配置数据。

在 Windows 2000 及更高版本的 Windows 中,调用 GetPrinterData 等效于调用将 pKeyName 参数设置为“PrinterDriverData”的 GetPrinterDataEx

语法

DWORD GetPrinterData(
  _In_  HANDLE  hPrinter,
  _In_  LPTSTR  pValueName,
  _Out_ LPDWORD pType,
  _Out_ LPBYTE  pData,
  _In_  DWORD   nSize,
  _Out_ LPDWORD pcbNeeded
);

parameters

hPrinter [in]

函数检索其配置数据的打印机或打印服务器的句柄。 使用 OpenPrinterOpenPrinter2AddPrinter 函数检索打印机句柄。

pValueName [in]

指向以 null 结尾的字符串的指针,该字符串标识要检索的数据。

对于打印机,此字符串是注册表中打印机的“PrinterDriverData”键下的注册表值的名称。

对于打印服务器,此字符串是以下备注部分中列出的预定义字符串之一。

pType [out]

指向变量的指针,该变量接收一个值,该值指示 在 pData 中检索到的数据类型。 函数返回存储数据的 SetPrinterDataSetPrinterDataEx 调用中指定的类型。 如果不需要数据类型,请将此参数设置为 NULL

pData [out]

指向接收配置数据的缓冲区的指针。

nSize [in]

pData 指向的缓冲区的大小(以字节为单位)。

线路板 [out]

指向变量的指针,该变量接收配置数据的大小(以字节为单位)。 如果 nSize 指定的缓冲区大小太小,则函数将返回 ERROR_MORE_DATA而ERROR_MORE_DATA,而ERROR_MORE_DATA,而“ERROR_MORE_DATA”指示 所需的缓冲区大小。

返回值

如果函数成功,则返回值 ERROR_SUCCESS。 如果函数失败,则返回值为错误值。

备注

注意

这是一个阻塞或同步函数,可能不会立即返回。 此函数的返回速度取决于运行时因素,例如网络状态、打印服务器配置以及编写应用程序时难以预测的打印机驱动程序实现因素。 从管理与用户界面交互的线程调用此函数可能会使应用程序看起来无响应。

GetPrinterData 检索由 SetPrinterDataExSetPrinterData 函数设置的打印机配置数据。

GetPrinterData 可能会触发对 GetPrinterDataFromPort 的 Windows 调用,这可能会写入注册表。 如果这样做,可能会出现副作用,例如在客户端中触发更新或升级打印机事件 ID 20(如果打印机在网络中共享)。

如果 hPrinter 是打印服务器的句柄, pValueName 可以指定以下预定义值之一。

注释
SPLREG_ALLOW_USER_MANAGEFORMS 具有 Service Pack 2 的 Windows XP (SP2) 及更高版本
Windows Server 2003 Service Pack 1 (SP1) 及更高版本
SPLREG_ARCHITECTURE
SPLREG_BEEP_ENABLED
SPLREG_DEFAULT_SPOOL_DIRECTORY
SPLREG_DNS_MACHINE_NAME
SPLREG_DS_PRESENT 成功返回后,如果计算机位于 DS 域上, pData 将包含0x0001;否则为 0。
SPLREG_DS_PRESENT_FOR_USER 成功返回后,如果用户登录到 DS 域, pData 将包含0x0001;否则为 0。
SPLREG_EVENT_LOG
SPLREG_MAJOR_VERSION
SPLREG_MINOR_VERSION
SPLREG_NET_POPUP Windows Server 2003 及更高版本中不支持
SPLREG_NET_POPUP_TO_COMPUTER 成功返回后,如果应将作业通知发送到客户端计算机, 则 pData 包含 1;如果要向用户发送作业通知,则包含 0。
Windows Server 2003 及更高版本中不支持
SPLREG_OS_VERSION Windows XP 及更高版本
SPLREG_OS_VERSIONEX
SPLREG_PORT_THREAD_PRIORITY_DEFAULT
SPLREG_PORT_THREAD_PRIORITY
SPLREG_PRINT_DRIVER_ISOLATION_GROUPS Windows 7 及更高版本
SPLREG_PRINT_DRIVER_ISOLATION_TIME_BEFORE_RECYCLE Windows 7 及更高版本
SPLREG_PRINT_DRIVER_ISOLATION_MAX_OBJECTS_BEFORE_RECYCLE Windows 7 及更高版本
SPLREG_PRINT_DRIVER_ISOLATION_IDLE_TIMEOUT Windows 7 及更高版本
SPLREG_PRINT_DRIVER_ISOLATION_EXECUTION_POLICY Windows 7 及更高版本
SPLREG_PRINT_DRIVER_ISOLATION_OVERRIDE_POLICY Windows 7 及更高版本
SPLREG_REMOTE_FAX 成功返回后,如果 FAX 服务支持远程客户端, 则 pData 包含0x0001;否则为 0。
SPLREG_RETRY_POPUP 成功返回时,如果服务器设置为重试所有作业的弹出窗口, 则 pData 包含 1;如果服务器不重试所有作业的弹出窗口,则 pData 包含 0。
Windows Server 2003 及更高版本中不支持
SPLREG_SCHEDULER_THREAD_PRIORITY
SPLREG_SCHEDULER_THREAD_PRIORITY_DEFAULT
SPLREG_WEBSHAREMGMT Windows Server 2003 及更高版本

pValueName 的以下值指示发生错误时池打印行为。

注释
SPLREG_RESTART_JOB_ON_POOL_ERROR pData 的值指示发生错误后在另一个端口上重启作业的时间(以秒为单位)。 此设置与 SPLREG_RESTART_JOB_ON_POOL_ENABLED 一起使用。
SPLREG_RESTART_JOB_ON_POOL_ENABLED pData 中的非零值指示已启用SPLREG_RESTART_JOB_ON_POOL_ERROR

SPLREG_RESTART_JOB_ON_POOL_ERROR中指定的时间是最短时间。 实际时间可能会更长,具体取决于以下端口监视器设置,这些设置是此注册表项下的注册表值:

HKLM\SYSTEM\CurrentControlSet\Control\Print\Monitors\<MonitorName>\Ports

调用 RegQueryValueEx 函数来查询这些值。

端口监视器设置 数据类型 含义
StatusUpdateEnabled REG_DWORD 如果为非零值,则允许端口监视器使用端口状态更新后台处理程序。
StatusUpdateInterval REG_DWORD 指定端口监视器使用端口状态更新后台处理程序时的间隔(以分钟为单位)。

在 Windows 7 及更高版本的 Windows 中,发送到打印服务器的打印作业默认呈现在客户端上。 以下值配置打印作业的客户端呈现,如果在 pValueName 中设置以下值,则可以读取这些值。

设置 数据类型 说明
EMFDespoolingSetting REG_DWORD 如果值为 0,或者如果注册表中不存在此值,则启用打印作业的默认客户端呈现。
如果值为 1,则禁用打印作业的客户端呈现。
ForceClientSideRendering REG_DWORD 如果值为 0,或者如果注册表中不存在此值,将导致打印作业在客户端上呈现。 如果打印作业无法在客户端上呈现,则会在服务器上呈现。 如果打印作业无法在服务器上呈现,它将失败。
值为 1 将在客户端上呈现打印作业。 如果打印作业无法在客户端上呈现,它将失败。

要求

要求
最低受支持的客户端
Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器
Windows 2000 Server [仅限桌面应用]
标头
Winspool.h (包括 Windows.h)

Winspool.lib
DLL
Winspool.drv
Unicode 和 ANSI 名称
GetPrinterDataW (Unicode) 和 GetPrinterDataA (ANSI)

另请参阅

打印

打印后台处理程序 API 函数

GetPrinterDataEx

OpenPrinter

SetPrinter

SetPrinterData

SetPrinterDataEx

PRINTPROCESSOR_CAPS_1