描述
EnumPrinters功能列举了可用的打印机,打印服务器,域或打印提供商。
C++ 语法
BOOL EnumPrinters( DWORD Flags, LPTSTR Name, DWORD Level, LPBYTE pPrinterEnum, DWORD cbBuf, LPDWORD pcbNeeded, LPDWORD pcReturned ); |
PowerBASIC 语法
FUNCTION EnumPrintersA ( _ BYVAL Flags AS DWORD, _ BYREF Name AS ASCIIZ, _ BYVAL Level AS DWORD, _ BYREF pPrinterEnum AS ANY, _ BYVAL cbBuf AS DWORD, _ BYREF pcbNeeded AS DWORD, _ BYREF pcReturned AS DWORD _ ) AS LONG |
Unicode版本:
FUNCTION EnumPrintersW ( _ BYVAL Flags AS DWORD, _ BYREF Name AS WSTRINGZ, _ BYVAL Level AS DWORD, _ BYREF pPrinterEnum AS ANY, _ BYVAL cbBuf AS DWORD, _ BYREF pcbNeeded AS DWORD, _ BYREF pcReturned AS DWORD _ ) AS LONG |
参数
Flags
[in]指定函数应枚举的打印对象的类型。该值可以是以下值中的一个或多个。
值 |
含义 |
PRINTER_ENUM_LOCAL |
如果PRINTER_ENUM_NAME标志未被传递,该函数将忽略名称参数,并枚举本地安装的打印机。如果PRINTER_ENUM_NAME也被传递,该函数将枚举名称上的本地打印机。
Windows 95/98 / Me:该函数还将枚举网络打印机,因为它们由本地打印提供商处理。 |
PRINTER_ENUM_NAME |
该函数列举了名称标识的打印机。这可以是服务器,域或打印提供者。如果Name为NULL,该函数枚举可用的打印提供者。 |
PRINTER_ENUM_SHARED |
该函数枚举具有共享属性的打印机。不能孤立使用;使用OR操作与另一个PRINTER_ENUM类型相结合。 |
PRINTER_ENUM_DEFAULT |
Windows 95/98 / Me:该函数返回有关默认打印机的信息。 |
PRINTER_ENUM_CONNECTIONS |
Windows NT / 2000 / XP / Vista / Windows 7:该函数枚举用户先前连接的打印机列表。 |
PRINTER_ENUM_NETWORK |
Windows NT / 2000 / XP / Vista / Windows 7:该函数枚举计算机域中的网络打印机。该值仅在水平为1时有效。 |
PRINTER_ENUM_REMOTE |
Windows NT / 2000 / XP / Vista / Windows 7:该函数枚举网络打印机和计算机域中的打印服务器。该值仅在水平为1时有效。 |
如果水平为4,则只能使用PRINTER_ENUM_CONNECTIONS和PRINTER_ENUM_LOCAL常量。
Name
[in]如果水平为1,则旗包含PRINTER_ENUM_NAME,并且名称不为空,则名称是指向以空值终止的字符串的指针,该字符串指定要枚举的对象的名称。该字符串可以是服务器,域或打印提供者的名称。
如果水平为1,则旗包含PRINTER_ENUM_NAME,Name为NULL,则该函数枚举可用的打印提供者。
如果水平为1,则旗包含PRINTER_ENUM_REMOTE,Name为NULL,则该函数枚举用户域中的打印机。
如果水平为2或5,则名称是指向以空值终止的字符串的指针,该字符串指定要列举打印机的服务器的名称。如果此字符串为NULL,则该函数枚举本机上安装的打印机。
如果水平为4,则名称应为NULL。该函数始终在本地机器上查询。
当Name为NULL时,将Flags设置为PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS枚举本机上安装的打印机。这些打印机包括物理连接到本地机器以及具有网络连接的远程打印机的打印机。
当Name不为NULL时,将Flags设置为PRINTER_ENUM_LOCAL | PRINTER_ENUM_NAME列举服务器名称上安装的本地打印机。
Level
[in]指定pPrinterEnum指向的数据结构的类型。有效值为1,2,4和5,它们对应于PRINTER_INFO_1,PRINTER_INFO_2,PRINTER_INFO_4和PRINTER_INFO_5数据结构。
Windows 95/98 / Me:值可以是1,2或5。
Windows NT / 2000 / XP / Vista / Windows 7:此值可以是1,2,4或5。
pPrinterEnum
[out]指向接收PRINTER_INFO_1,PRINTER_INFO_2,PRINTER_INFO_4或PRINTER_INFO_5结构数组的缓冲区的指针。每个结构包含描述可用打印对象的数据。
如果水平为1,则该数组包含PRINTER_INFO_1结构。如果水平为2,则该数组包含PRINTER_INFO_2结构。如果水平为4,则该数组包含PRINTER_INFO_4结构。如果水平为5,则该数组包含PRINTER_INFO_5结构。
缓冲区必须足够大以接收数据结构数组和结构成员指向的任何字符串或其他数据。如果缓冲区太小,则pcbNeeded参数返回所需的缓冲区大小。
Windows 95/98 / Me:缓冲区不能接收PRINTER_INFO_4结构。它可以接收任何其他类型。
cbBuf
[in]指定由pPrinterEnum指向的缓冲区的大小(以字节为单位)。
pcbNeeded
[out]指向如果函数成功则接收复制字节数的值的指针,如果cbBuf太小则需要的字节数。
pcReturned
[out]指向在pPrinterEnum个数组中函数返回的PRINTER_INFO_1,PRINTER_INFO_2,PRINTER_INFO_4或PRINTER_INFO_5结构的值的值的指针。
返回值
如果函数成功,返回值不为零。
如果函数失败,返回值为零。
备注
不要把这个方法称为DllMain.
IfEnumPrinters返回aPRINTER_INFO_1指定了PRINTER_ENUM_CONTAINER的结构,这表示打印机对象有层次结构。应用程序可以通过调用来枚举层次结构EnumPrinters再次,设置名称的价值PRINTER_INFO_1结构的pName成员。
该EnumPrinters功能不检索安全信息。IfPRINTER_INFO_2它们由pPrinterEnum指向的数组中返回结构pSecurityDescriptor成员将被设置为NULL。
要获取有关默认打印机的信息,请调用GetProfileString功能部分名称字符串设置为“Windows”,键名字符串设置为“设备”。返回的字符串包含默认打印机的名称,打印机DRV文件的名称以及打印机所连接的端口。
Windows 2000 / XP/ VISTA / Windows 7的:要获取有关默认打印机的信息,请调用GetDefaultPrinter.
Windows NT / 2000 / XP/ VISTA / Windows 7的:PRINTER_INFO_4结构提供了一种简单而非常快速的方式来检索本地计算机上安装的打印机的名称,以及用户已建立的远程连接。什么时候EnumPrinters被称为PRINTER_INFO_4数据结构,该函数查询注册表中指定的信息,然后立即返回。这与行为不同EnumPrinters当与其他级别的电话PRINTER_INFO_*数据结构。特别是什么时候EnumPrinters被称为2级(PRINTER_INFO_2)数据结构,它执行一个OpenPrinter呼叫每个远程连接。如果远程连接断开,或者远程服务器不再存在,或远程打印机不再存在,则该函数必须等待RPC超时,因此会失败OpenPrinter呼叫。这可能需要一段时间。通过一个PRINTER_INFO_4结构允许应用程序检索最少的必需信息;如果需要更详细的信息,则随后EnumPrinter可以进行2级呼叫。
Windows 95/98 / Me:要快速枚举本地和网络打印机,请使用PRINTER_INFO_5结构体。这导致EnumPrinters查询注册表而不是进行远程调用,并且类似于使用PRINTER_INFO_4结构如前段所述。
Windows Vista:返回的打印机数据EnumPrinters是从本地缓存中检索的水平is 4.
例子
下表显示EnumPrinters输出各种旗值的时候水平参数设置为1。
在里面名称表的参数列,您应该替换适当的名称打印提供商,域,和机.例如,对于打印提供程序,您可以使用网络打印提供程序的名称或本地打印提供程序的名称。要检索打印提供商名称,请调用EnumPrinters同名称设置为NULL。
标志参数 |
名称参数 |
结果 |
PRINTER_ENUM_LOCAL(而不是PRINTER_ENUM_NAME) |
名称参数被忽略。 |
所有本地打印机。
Windows 95/98 / Me:还列举网络打印机,因为它们是在本地安装的。 |
PRINTER_ENUM_NAME |
"打印提供商" |
所有域名 |
PRINTER_ENUM_NAME |
Windows NT / 2000 / XP / Vista / Windows 7: "打印提供商!域名" |
计算机域中的所有打印机和打印服务器 |
PRINTER_ENUM_NAME |
Windows NT / 2000 / XP / Vista / Windows 7: "打印提供商!! \\\\机器" |
所有打印机在\\\\ Machine共享 |
PRINTER_ENUM_NAME |
Windows NT / 2000 / XP / Vista / Windows 7:一个空字符串“”
Windows 95/98 / Me:本地机器或本地打印提供程序的名称。 |
所有本地打印机。
Windows 95/98 / Me:还列举网络打印机,因为它们是在本地安装的。 |
PRINTER_ENUM_NAME |
NULL |
计算机领域的所有打印提供商 |
Windows NT / 2000 / XP / Vista / Windows 7: PRINTER_ENUM_CONNECTIONS |
名称参数被忽略。 |
所有连接的远程打印机 |
Windows NT / 2000 / XP / Vista / Windows 7: PRINTER_ENUM_NETWORK |
名称参数被忽略。 |
计算机域中的所有打印机 |
Windows NT / 2000 / XP / Vista / Windows 7: PRINTER_ENUM_REMOTE |
一个空字符串“” |
计算机域中的所有打印机和打印服务器 |
Windows NT / 2000 / XP / Vista / Windows 7: PRINTER_ENUM_REMOTE |
"打印提供商" |
与PRINTER_ENUM_NAME相同 |
Windows NT / 2000 / XP / Vista / Windows 7: PRINTER_ENUM_REMOTE |
"打印提供商!域名" |
无论域指定,计算机域中的所有打印机和打印服务器。 |
引用文件 #INCLUDE Once
WinSpool.inc(包括Windows.inc)