다음을 통해 공유


EnumPrinters 함수

EnumPrinters 함수는 사용 가능한 프린터, 인쇄 서버, 도메인 또는 인쇄 공급자를 열거합니다.

구문

BOOL EnumPrinters(
  _In_  DWORD   Flags,
  _In_  LPTSTR  Name,
  _In_  DWORD   Level,
  _Out_ LPBYTE  pPrinterEnum,
  _In_  DWORD   cbBuf,
  _Out_ LPDWORD pcbNeeded,
  _Out_ LPDWORD pcReturned
);

매개 변수

Flags [in]

함수가 열거해야 하는 인쇄 개체의 형식입니다. 이 값은 다음 값 중 하나 이상이 될 수 있습니다.

의미
PRINTER_ENUM_LOCAL
PRINTER_ENUM_NAME 플래그도 전달되지 않으면 함수는 Name 매개 변수를 무시하고 로컬에 설치된 프린터를 열거합니다. PRINTER_ENUM_NAME 전달되면 함수는 이름에 로컬 프린터를 열거합니다.
PRINTER_ENUM_NAME
함수는 Name으로 식별된 프린터를 열거합니다. 서버, 도메인 또는 인쇄 공급자일 수 있습니다. NameNULL이면 함수는 사용 가능한 인쇄 공급자를 열거합니다.
PRINTER_ENUM_SHARED
함수는 공유 특성이 있는 프린터를 열거합니다. 격리된 상태로 사용할 수 없습니다. OR 연산을 사용하여 다른 PRINTER_ENUM 형식과 결합합니다.
PRINTER_ENUM_CONNECTIONS
함수는 사용자가 이전에 연결한 프린터 목록을 열거합니다.
PRINTER_ENUM_NETWORK
함수는 컴퓨터의 도메인에서 네트워크 프린터를 열거합니다. 이 값은 Level 이 1인 경우에만 유효합니다.
PRINTER_ENUM_REMOTE
이 함수는 컴퓨터 도메인의 네트워크 프린터 및 인쇄 서버를 열거합니다. 이 값은 Level 이 1인 경우에만 유효합니다.
PRINTER_ENUM_CATEGORY_3D
함수는 3D 프린터만 열거합니다.
PRINTER_ENUM_CATEGORY_ALL
이 함수는 3D 프린터를 포함한 모든 인쇄 디바이스를 열거합니다.

Level이 4이면 PRINTER_ENUM_CONNECTIONS 및 PRINTER_ENUM_LOCAL 상수만 사용할 수 있습니다.

참고

3D 인쇄 디바이스는 기본적으로 열거되지 않습니다. 3D 프린터만 열거하려면 PRINTER_ENUM_CATEGORY_3DPRINTER_ENUM_LOCAL 모두 포함해야 합니다. 다른 모든 로컬 프린터와 함께 3D 프린터를 포함하려면 PRINTER_ENUM_CATEGORY_ALLPRINTER_ENUM_LOCAL 사용합니다.

Name [in]

Level이 1이고 Flags에 PRINTER_ENUM_NAME 포함되고 NameNULL이 아닌 경우 Name은 열거할 개체의 이름을 지정하는 null로 끝나는 문자열에 대한 포인터입니다. 이 문자열은 서버, 도메인 또는 인쇄 공급자의 이름일 수 있습니다.

Level이 1이고 Flags에 PRINTER_ENUM_NAME 포함되고 NameNULL인 경우 함수는 사용 가능한 인쇄 공급자를 열거합니다.

Level이 1이고 Flags에 PRINTER_ENUM_REMOTE 포함되고 NameNULL인 경우 함수는 사용자의 도메인에 있는 프린터를 열거합니다.

Level이 2 또는 5이면 Name은 프린터를 열거할 서버의 이름을 지정하는 null로 끝나는 문자열에 대한 포인터입니다. 이 문자열이 NULL이면 함수는 로컬 컴퓨터에 설치된 프린터를 열거합니다.

Level이 4이면 이름은NULL이어야 합니다. 함수는 항상 로컬 컴퓨터에서 쿼리합니다.

NameNULL이면 플래그를 PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS 로컬 컴퓨터에 설치된 프린터를 열거합니다. 이러한 프린터에는 로컬 컴퓨터에 물리적으로 연결된 프린터와 네트워크 연결이 있는 원격 프린터가 포함됩니다.

NameNULL이 아닌 경우 플래그를 PRINTER_ENUM_LOCAL | PRINTER_ENUM_NAME 서버 이름에 설치된 로컬 프린터를 열거합니다.

수준 [in]

pPrinterEnum에서 가리키는 데이터 구조의 형식입니다. 유효한 값은 PRINTER_INFO_1, PRINTER_INFO_2, PRINTER_INFO_4PRINTER_INFO_5 데이터 구조에 해당하는 1, 2, 4 및 5입니다.

이 값은 1, 2, 4 또는 5일 수 있습니다.

pPrinterEnum [out]

PRINTER_INFO_1, PRINTER_INFO_2, PRINTER_INFO_4 또는 PRINTER_INFO_5 구조체의 배열을 수신하는 버퍼에 대한 포인터입니다. 각 구조체에는 사용 가능한 인쇄 개체를 설명하는 데이터가 포함되어 있습니다.

Level이 1이면 배열에 PRINTER_INFO_1 구조체가 포함됩니다. Level이 2이면 배열에 PRINTER_INFO_2 구조체가 포함됩니다. Level이 4이면 배열에 PRINTER_INFO_4 구조체가 포함됩니다. Level이 5이면 배열에 PRINTER_INFO_5 구조체가 포함됩니다.

버퍼는 데이터 구조체의 배열과 구조체 멤버가 가리키는 문자열 또는 기타 데이터의 배열을 받을 수 있을 만큼 커야 합니다. 버퍼가 너무 작으면 pcbNeeded 매개 변수는 필요한 버퍼 크기를 반환합니다.

cbBuf [in]

pPrinterEnum이 가리키는 버퍼의 크기(바이트)입니다.

pcbNeeded [out]

함수가 성공하면 복사된 바이트 수를 받는 값에 대한 포인터이거나 cbBuf 가 너무 작은 경우 필요한 바이트 수입니다.

pcReturned [out]

함수가 pPrinterEnum이 가리키는 배열에서 반환하는 PRINTER_INFO_1, PRINTER_INFO_2, PRINTER_INFO_4 또는 PRINTER_INFO_5 구조체의 수를 수신하는 값에 대한 포인터입니다.

반환 값

함수가 성공하면 반환 값은 0이 아닌 값입니다.

함수가 실패하면 반환 값은 0입니다.

설명

DllMain에서 이 메서드를 호출하지 마세요.

참고

이는 차단 또는 동기 함수이며 즉시 반환되지 않을 수 있습니다. 이 함수가 반환되는 빈도는 애플리케이션을 작성할 때 예측하기 어려운 네트워크 상태, 인쇄 서버 구성 및 프린터 드라이버 구현 요소와 같은 런타임 요인에 따라 달라집니다. 사용자 인터페이스와의 상호 작용을 관리하는 스레드에서 이 함수를 호출하면 애플리케이션이 응답하지 않는 것처럼 보일 수 있습니다.

EnumPrintersPRINTER_ENUM_CONTAINER 지정된 PRINTER_INFO_1 구조를 반환하는 경우 프린터 개체의 계층 구조가 있음을 나타냅니다. 애플리케이션은 EnumPrinters 를 다시 호출하고 NamePRINTER_INFO_1 구조체의 pName 멤버 값으로 설정하여 계층을 열거할 수 있습니다.

EnumPrinters 함수는 보안 정보를 검색하지 않습니다. pPrinterEnum이 가리키는 배열에서 PRINTER_INFO_2 구조체가 반환되면 pSecurityDescriptor 멤버가 NULL로 설정됩니다.

기본 프린터에 대한 정보를 가져오려면 GetDefaultPrinter를 호출합니다.

PRINTER_INFO_4 구조는 로컬 컴퓨터에 설치된 프린터의 이름과 사용자가 설정한 원격 연결을 쉽고 빠르게 검색할 수 있는 방법을 제공합니다. PRINTER_INFO_4 데이터 구조를 사용하여 EnumPrinters를 호출하면 해당 함수는 레지스트리에서 지정된 정보를 쿼리한 다음 즉시 반환합니다. 이는 다른 수준의 PRINTER_INFO_* 데이터 구조로 호출할 때 EnumPrinters의 동작과 다릅니다. 특히 수준 2(PRINTER_INFO_2) 데이터 구조를 사용하여 EnumPrinters가 호출되면 각 원격 연결에서 OpenPrinter 호출을 수행합니다. 원격 연결이 중단되거나 원격 서버가 더 이상 존재하지 않거나 원격 프린터가 더 이상 존재하지 않는 경우 함수는 RPC가 시간 초과되기를 기다렸다가 결과적으로 OpenPrinter 호출에 실패해야 합니다. 이 작업은 다소 시간이 걸릴 수 있습니다. PRINTER_INFO_4 구조를 전달하면 애플리케이션이 최소한의 필수 정보를 검색할 수 있습니다. 자세한 정보가 필요한 경우 후속 EnumPrinters 수준 2 호출을 수행할 수 있습니다.

Windows Vista:Level 값이 4이면 EnumPrinters에서 반환된 프린터 데이터가 로컬 캐시에서 검색됩니다.

다음 표에서는 Level 매개 변수가 1로 설정된 경우 다양한 Flags 값에 대한 EnumPrinters 출력을 보여줍니다.

테이블의 Name 매개 변수 열에서 인쇄 공급자, 도메인 및 컴퓨터에 대한 적절한 이름을 대체해야 합니다. 예를 들어 "인쇄 공급자"의 경우 네트워크 인쇄 공급자의 이름 또는 로컬 인쇄 공급자의 이름을 사용할 수 있습니다. 인쇄 공급자 이름을 검색하려면 이름이NULL로 설정된 EnumPrinters를 호출합니다.

Flags 매개 변수 Name 매개 변수 결과
PRINTER_ENUM_LOCAL(PRINTER_ENUM_NAME 아님) Name 매개 변수는 무시됩니다.
모든 로컬 프린터.
PRINTER_ENUM_NAME "인쇄 공급자"
모든 도메인 이름
PRINTER_ENUM_NAME "인쇄 공급자! 도메인"
컴퓨터 도메인의 모든 프린터 및 인쇄 서버
PRINTER_ENUM_NAME "인쇄 공급자!! \\Machine"
\\Machine에서 공유되는 모든 프린터
PRINTER_ENUM_NAME 빈 문자열 ""
모든 로컬 프린터.
PRINTER_ENUM_NAME NULL
컴퓨터 도메인의 모든 인쇄 공급자
PRINTER_ENUM_CONNECTIONS Name 매개 변수는 무시됩니다.
연결된 모든 원격 프린터
PRINTER_ENUM_NETWORK Name 매개 변수는 무시됩니다.
컴퓨터 도메인의 모든 프린터
PRINTER_ENUM_REMOTE 빈 문자열 ""
컴퓨터 도메인의 모든 프린터 및 인쇄 서버
PRINTER_ENUM_REMOTE "인쇄 공급자"
Same as PRINTER_ENUM_NAME
PRINTER_ENUM_REMOTE "인쇄 공급자! 도메인"
지정한 도메인에 관계없이 컴퓨터 도메인의 모든 프린터 및 인쇄 서버
PRINTER_ENUM_CATEGORY_3D Name 매개 변수는 무시됩니다.
3D 프린터만 열거됩니다.
PRINTER_ENUM_CATEGORY_ALL Name 매개 변수는 무시됩니다.
3D 프린터는 다른 모든 프린터와 함께 열거됩니다.

요구 사항

요구 사항
지원되는 최소 클라이언트
Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버
Windows 2000 Server[데스크톱 앱만]
헤더
Winspool.h(Windows.h 포함)
라이브러리
Winspool.lib
DLL
Winspool.drv
유니코드 및 ANSI 이름
EnumPrintersW (유니코드) 및 EnumPrintersA (ANSI)

추가 정보

인쇄

인쇄 스풀러 API 함수

AddPrinter

DeletePrinter

GetPrinter

PRINTER_INFO_1

PRINTER_INFO_2

PRINTER_INFO_4

PRINTER_INFO_5

SetPrinter