EnumPrinters
The EnumPrinters
function enumerates available printers, print servers, domains, or print
providers.
BOOL EnumPrinters(
DWORD Flags, |
// types of printer
objects to enumerate |
LPTSTR Name, |
// name of printer
object |
DWORD Level, |
// specifies type
of printer info structure |
LPBYTE pPrinterEnum, |
// pointer to
buffer to receive printer info structures |
DWORD cbBuf, |
// size, in bytes,
of array |
LPDWORD pcbNeeded, |
// pointer to
variable with no. of bytes copied (or required) |
LPDWORD pcReturned |
// pointer to
variable with no. of printer info. structures copied |
); |
|
Parameters
Flags
Specifies the
types of print objects that the function should enumerate. This value can be a
combination of the following constants:
Value |
Meaning |
PRINTER_ENUM_LOCAL |
The
function ignores the Name parameter, and enumerates the locally
installed printers. Windows
95: The function will also
enumerate network printers because they are handled by the local print
provider. |
PRINTER_ENUM_NAME |
The
function enumerates the printer identified by Name. This can be a
server, a domain, or a print provider. If Name is NULL, the function
enumerates available print providers. |
PRINTER_ENUM_SHARED |
The
function enumerates printers that have the shared attribute. Cannot be used
in isolation; use an OR operation to combine with another PRINTER_ENUM type. |
PRINTER_ENUM_DEFAULT |
Windows
95 only: The function returns
information about the default printer. |
PRINTER_ENUM_CONNECTIONS |
Windows
NT only: The function enumerates
the list of printers to which the user has made previous connections. |
PRINTER_ENUM_NETWORK |
Windows
NT only: The function enumerates
network printers in the computer s domain. This value is valid only if Level
is 1. |
PRINTER_ENUM_REMOTE |
Windows
NT only: The function enumerates network
printers and print servers in the computer s domain. This value is valid only
if Level is 1. |
If Level
is 4, you can only use the PRINTER_ENUM_CONNECTIONS and PRINTER_ENUM_LOCAL
constants.
Name
If Level
is 1, Flags contains PRINTER_ENUM_NAME, and Name is non-NULL, Name
points to a null-terminated string that specifies the name of the object to
enumerate. This string can be the name of a server, a domain, or a print
provider.
If Level
is 1, Flags contains PRINTER_ENUM_NAME, and Name is NULL, the function
enumerates the available print providers.
If Level
is 1, Flags contains PRINTER_ENUM_REMOTE, and Name is NULL, the
function enumerates the printers in the user s domain.
If Level
is 2 or 5, Name points to a null-terminated string that specifies
the name of a server whose printers are to be enumerated. If this string is
NULL, the function enumerates the printers installed on the local machine.
If Level
is 4, Name should be NULL. The function always queries on the local
machine.
When Name
is NULL, it enumerates printers that are installed on the local machine. These
printers include those that are physically attached to the local machine as
well as remote printers to which it has a network connection.
Level
Specifies the
type of data structures pointed to by pPrinterEnum. Valid values
are 1, 2, 4, and 5, which correspond to the PRINTER_INFO_1
Windows
95: The value can be 1, 2, or 5.
Windows
NT: This value can be 1, 2, 4, or 5.
pPrinterEnum
Pointer to a
buffer that receives an array of PRINTER_INFO_1, PRINTER_INFO_2, PRINTER_INFO_4,
or PRINTER_INFO_5 structures. Each structure contains data that
describes an available print object. If Level is 1, the array contains PRINTER_INFO_1
structures. If Level is 2, the array contains PRINTER_INFO_2
structures. If Level is 4, the array contains PRINTER_INFO_4
structures. If Level is 5, the array contains PRINTER_INFO_5
structures.
Windows
95: The buffer cannot receive PRINTER_INFO_4
structures. It can receive any of the other types.
cbBuf
Specifies the
size, in bytes, of the array pointed to by pPrinterEnum.
pcbNeeded
Pointer to a
value that receives the number of bytes copied if the function succeeds or the
number of bytes required if cbBuf is too small.
pcReturned
Pointer to a
value that receives the number of PRINTER_INFO_1
Return Values
If the function
succeeds, the return value is nonzero.
If the
function fails, the return value is zero. To get extended error information,
call GetLastError
Remarks
If EnumPrinters
returns a PRINTER_INFO_1 structure in which PRINTER_ENUM_CONTAINER is
specified, this indicates that there is a hierarchy of printer objects. An
application can enumerate the hierarchy by calling EnumPrinters again,
setting Name to the value of the PRINTER_INFO_1 structure s pName
member.
The EnumPrinters
function does not retrieve security information. If PRINTER_INFO_2
structures are returned in the array pointed to by pPrinterEnum, their pSecurityDescriptor
members will be set to NULL.
To
get information about the default printer, call the GetProfileString
Windows
NT:
The PRINTER_INFO_4
structure provides an easy and extremely fast way to retrieve the names of the
printers installed on a local machine, as well as the remote connections that a
user has established. When EnumPrinters is called with a PRINTER_INFO_4
data structure, that function queries the registry for the specified
information, then returns immediately. This differs from the behavior of EnumPrinters
when called with other levels of PRINTER_INFO_* data structures. In
particular, when EnumPrinters is called with a level 2 (PRINTER_INFO_2)
data structure, it performs an OpenPrinter call on each remote
connection. If a remote connection is down, or the remote server no longer
exists, or the remote printer no longer exists, the function must wait for RPC
to time out and consequently fail the OpenPrinter call. This can take a
while. Passing a PRINTER_INFO_4 structure lets an application retrieve a
bare minimium of required information; if more detailed information is desired,
a subsequent EnumPrinter level 2 call can be made.
Windows
95:
To quickly
enumerate local and network printers, use the PRINTER_INFO_5 structure.
This causes EnumPrinters to query the registry rather than make remote
calls, and is similar to using the PRINTER_INFO_4 structure on Windows
NT as described in the preceding paragraph.
Examples
The following
table shows the EnumPrinters output for various Flags values when
the Level parameter is set to 1.
In the Name
parameter column of the table, you should substitute an appropriate name for Print
Provider, Domain, and Machine. For example, for Print
Provider, you could use the name of the Windows NT network print provider:
Windows NT Remote Printers , or the name of the Windows 95 local print
provider: Windows 95 Local Print Provider . To get print provider names, call EnumPrinters
with Name set to NULL.
Flags parameter |
Name parameter |
Result |
PRINTER_ENUM_LOCAL |
The Name
parameter is ignored. |
All local
printers. Windows
95: Also enumerates network
printers because they are installed locally. |
PRINTER_ENUM_NAME |
Print
Provider |
All domain
names |
PRINTER_ENUM_NAME |
Windows
NT only: |
All
printers and print servers in the computer s domain |
PRINTER_ENUM_NAME |
Windows
NT only: |
All printers
shared at \\Machine |
PRINTER_ENUM_NAME |
Windows
NT: An empty string, Windows
95: The name of the local machine
or the local print provider. |
All local
printers. Windows
95: Also enumerates network
printers because they are installed locally. |
PRINTER_ENUM_NAME |
NULL |
All print
providers in the computer s domain |
Windows
NT only: |
The Name
parameter is ignored. |
All
connected remote printers |
Windows
NT only: |
The Name
parameter is ignored. |
All
printers in the computer s domain |
Windows
NT only: |
An empty
string, |
All
printers and print servers in the computer s domain |
Windows
NT only: |
Print
Provider |
Same as
PRINTER_ENUM_NAME |
Windows
NT only: |
Print
Provider!Domain |
All
printers and print servers in computer s domain, regardless of Domain
specified. |
See Also