GetPrinter 函数检索有关指定打印机的信息。
语法
BOOL GetPrinter(
  _In_  HANDLE  hPrinter,
  _In_  DWORD   Level,
  _Out_ LPBYTE  pPrinter,
  _In_  DWORD   cbBuf,
  _Out_ LPDWORD pcbNeeded
);
参数
- 
hPrinter [in] 
- 
函数检索其信息的打印机句柄。 使用 OpenPrinter 或 AddPrinter 函数检索打印机句柄。 
- 
级别 [in] 
- 
函数存储在 pPrinter 指向的缓冲区中的结构的级别或类型。 此值可以是 1、2、3、4、5、6、7、8 或 9。 
- 
pPrinter [out] 
- 
指向缓冲区的指针,该缓冲区接收包含有关指定打印机的信息的结构。 缓冲区必须足够大,才能接收结构以及结构成员指向的任何字符串或其他数据。 如果缓冲区太小, 则参数将 返回所需的缓冲区大小。 结构的类型由 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 指向的缓冲区的大小(以字节为单位)。 
- 
2011 年 [out] 
- 
指向变量的指针,函数将该变量设置为打印机信息的大小(以字节为单位)。 如果 cbBuf 小于此值, 则 GetPrinter 将失败,并且该值表示所需的缓冲区大小。 如果 cbBuf 等于或大于此值, 则 GetPrinter 成功,并且该值表示缓冲区中存储的字节数。 
返回值
如果函数成功,则返回值为非零值。
如果函数失败,则返回值为零。
注解
注意
这是一个阻塞或同步函数,可能不会立即返回。 此函数的返回速度取决于运行时因素,例如网络状态、打印服务器配置以及编写应用程序时难以预测的打印机驱动程序实现因素。 从管理与用户界面交互的线程调用此函数可能会使应用程序看起来无响应。
PRINTER_INFO_2、PRINTER_INFO_8 和 PRINTER_INFO_9 结构中的 pDevMode 成员可以为 NULL。 发生这种情况时,打印机将不可用,直到成功重新安装驱动程序。
对于包含指向安全描述符的指针 的PRINTER_INFO_2 和 PRINTER_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 [仅限桌面应用] | 
| 标头 | 
 | 
| 库 | 
 | 
| DLL | 
 | 
| Unicode 和 ANSI 名称 | GetPrinterW (Unicode) 和 GetPrinterA (ANSI) |