GetPrinterDataEx 函数

GetPrinterDataEx 函数检索指定打印机或打印服务器的配置数据。 GetPrinterDataEx 可以检索 SetPrinterData 函数存储的值。 此外, GetPrinterDataEx 可以检索 SetPrinterDataEx 函数存储在指定键下的值。

语法

DWORD GetPrinterDataEx(
  _In_  HANDLE  hPrinter,
  _In_  LPCTSTR pKeyName,
  _In_  LPCTSTR pValueName,
  _Out_ LPDWORD pType,
  _Out_ LPBYTE  pData,
  _In_  DWORD   nSize,
  _Out_ LPDWORD pcbNeeded
);

参数

hPrinter [in]

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

pKeyName [in]

指向以 null 结尾的字符串的指针,该字符串指定包含要检索的值的键。 使用反斜杠 ( \ ) 字符作为分隔符来指定具有一个或多个子项的路径。

如果 hPrinter 是打印机的句柄,而 pKeyNameNULL 或空字符串, 则 GetPrinterDataEx 返回 ERROR_INVALID_PARAMETER

如果 hPrinter 是打印服务器的句柄,则忽略 pKeyName

pValueName [in]

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

对于打印机,此字符串指定 pKeyName 键下的值的名称。

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

pType [out]

指向变量的指针,该变量接收值中存储的数据类型。 函数返回存储数据时 SetPrinterDataEx 调用中指定的类型。 如果不需要信息,此参数可以为 NULLGetPrinterDataExpType 作为 RegQueryValueEx 函数调用的 lpdwType 参数传递。

pData [out]

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

nSize [in]

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

2011 年 [out]

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

返回值

如果函数成功,则返回值 ERROR_SUCCESS

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

备注

注意

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

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

调用将 pKeyName 参数设置为“PrinterDriverData”的 GetPrinterDataEx 等效于调用 GetPrinterData 函数。

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

注释
SPLREG_ALLOW_USER_MANAGEFORMS Windows XP Service Pack 2 (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 指定端口监视器使用端口状态更新后台处理程序时的间隔(以分钟为单位)。

如果 pKeyName 是预定义的目录服务 (DS) 键之一 (请参阅 SetPrinter) , pValueName 包含逗号 (',') ,则 pValueName 前面逗号部分是值名称,逗号右侧 的 pValueName 部分是 DS 属性 OID。 创建名为 OID 的子项,并在 OID 键下输入由值名称和 OID 组成的新值。 SetPrinterDataEx 还会在 DS 键下添加值名称和数据。

在 Windows 7 及更高版本的 Windows 中,发送到打印服务器的打印作业默认呈现在客户端上。 通过将 pKeyName 设置为“PrinterDriverData”,将 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 名称
GetPrinterDataExW (Unicode) 和 GetPrinterDataExA (ANSI)

另请参阅

打印

打印后台处理程序 API 函数

OpenPrinter

SetPrinterDataEx