GetPrinter 函数

GetPrinter 函数检索有关指定打印机的信息。

语法

BOOL GetPrinter(
  _In_  HANDLE  hPrinter,
  _In_  DWORD   Level,
  _Out_ LPBYTE  pPrinter,
  _In_  DWORD   cbBuf,
  _Out_ LPDWORD pcbNeeded
);

参数

hPrinter [in]

函数检索信息的打印机的句柄。 使用 OpenPrinterAddPrinter 函数检索打印机句柄。

级别 [in]

函数存储到 pPrinter 指向的缓冲区中的级别或结构类型。

此值可以是 1、2、3、4、5、6、7、8 或 9。

pPrinter [out]

指向接收包含指定打印机信息的结构的缓冲区的指针。 缓冲区必须足够大,才能接收结构成员指向的结构和任何字符串或其他数据。 如果缓冲区太小, 则委会Needed 参数将返回所需的缓冲区大小。

结构的类型由 Level 的值确定。

级别 结构
1
包含常规打印机信息的 PRINTER_INFO_1 结构。
2
包含有关打印机的详细信息的 PRINTER_INFO_2 结构。
3
包含打印机安全信息的 PRINTER_INFO_3 结构。
4
包含最小打印机信息(包括打印机的名称、服务器的名称以及打印机是远程还是本地打印机)的 PRINTER_INFO_4 结构。
5
包含打印机属性和超时设置等打印机信息的 PRINTER_INFO_5 结构。
6
指定打印机状态值的 PRINTER_INFO_6 结构。
7
指示打印机是否在目录服务中发布PRINTER_INFO_7结构。
8
指定全局默认打印机设置 的PRINTER_INFO_8 结构。
9
指定每用户默认打印机设置 的PRINTER_INFO_9 结构。

cbBuf [in]

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

azureNeeded [out]

指向函数设置为打印机信息的大小(以字节为单位)的变量的指针。 如果 cbBuf 小于此值, GetPrinter 将失败,并且该值表示所需的缓冲区大小。 如果 cbBuf 等于或大于此值, 则 GetPrinter 成功,并且该值表示缓冲区中存储的字节数。

返回值

如果函数成功,则返回值为非零值。

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

备注

注意

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

PRINTER_INFO_2PRINTER_INFO_8PRINTER_INFO_9 结构中的 pDevMode 成员可以为 NULL。 发生这种情况时,打印机将不可用,直到驱动程序成功重新安装。

对于包含指向安全描述符的指针 的PRINTER_INFO_2PRINTER_INFO_3 结构,函数仅检索调用方有权读取的安全描述符的那些组件。 若要检索特定的安全描述符组件,必须在调用 OpenPrinter 函数以检索打印机句柄时指定必要的访问权限。 下表显示了读取各种安全描述符组件所需的访问权限。

访问权限 安全描述符组件
READ_CONTROL
所有者
主要组
DACL () 自由访问控制列表
ACCESS_SYSTEM_SECURITY
系统访问控制列表 (SACL)

如果指定级别 7,则PRINTER_INFO_7的 dwAction 成员返回以下值之一,以指示打印机是否在目录服务中发布。

dwAction 值 含义
DSPRINT_PUBLISH 打印机已发布。 pszObjectGUID 成员包含与打印机关联的目录服务打印队列对象的 GUID。
DSPRINT_UNPUBLISH 打印机未发布。
DSPRINT_PENDING 指示系统正在尝试完成发布或取消发布操作。 如果 SetPrinter 调用无法发布或取消发布打印机,系统会进一步尝试在后台完成操作。

从 Windows Vista 开始,当 hPrinter 引用打印服务器托管的打印机时,GetPrinter 返回的打印机数据将从本地缓存中检索,并且至少有一个与打印服务器的打开连接。 在所有其他配置中,从打印服务器查询打印机数据。

要求

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

Winspool.lib
DLL
Winspool.drv
Unicode 和 ANSI 名称
GetPrinterW (Unicode) 和 GetPrinterA (ANSI)

另请参阅

打印

打印后台处理程序 API 函数

AbortPrinter

AddPrinter

ClosePrinter

DeletePrinter

EnumPrinters

PRINTER_INFO_1

PRINTER_INFO_2

PRINTER_INFO_3

PRINTER_INFO_4

PRINTER_INFO_5

PRINTER_INFO_7

PRINTER_INFO_8

PRINTER_INFO_9

OpenPrinter

SetPrinter