OpenPrinter 함수

OpenPrinter 함수는 인쇄 하위 시스템의 지정된 프린터 또는 인쇄 서버 또는 기타 유형의 핸들에 대한 핸들을 검색합니다.

구문

BOOL OpenPrinter(
  _In_  LPTSTR             pPrinterName,
  _Out_ LPHANDLE           phPrinter,
  _In_  LPPRINTER_DEFAULTS pDefault
);

매개 변수

pPrinterName [in]

프린터 또는 인쇄 서버, 프린터 개체, XcvMonitor 또는 XcvPort의 이름을 지정하는 null로 끝나는 문자열에 대한 포인터입니다.

프린터 개체의 경우 프린터 이름, 작업 xxxx를 사용합니다. XcvMonitor의 경우 ServerName, XcvMonitor MonitorName을 사용합니다. XcvPort의 경우 ServerName, XcvPort PortName을 사용합니다.

NULL인 경우 로컬 프린터 서버를 나타냅니다.

phPrinter [out]

열려 있는 프린터 또는 인쇄 서버 개체에 대한 핸들(스레드로부터 안전하지 않음)을 수신하는 변수에 대한 포인터입니다.

phPrinter 매개 변수는 XcvData 함수에 사용할 Xcv 핸들을 반환할 수 있습니다. XcvData에 대한 자세한 내용은 DDK를 참조하세요.

pDefault [in]

PRINTER_DEFAULTS 구조체에 대한 포인터입니다. 이 값은 NULL일 수 있습니다.

반환 값

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

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

설명

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

참고

원격 프린터에 대해 OpenPrinter 를 호출하여 원격 프린터에 대해 가져온 핸들은 인쇄 스풀러 서비스의 로컬 캐시를 통해 프린터에 액세스합니다. 이 캐시는 실시간 정확하지 않습니다. 정확한 데이터를 가져오려면 OpenPrinter 호출을 openPrinter2 로 pOptions.dwFlags를 PRINTER_OPTION_NO_CACHE 설정으로 바꿉니다. OpenPrinter2W만 작동합니다. 함수는 다른 Printing API 호출을 사용하고 로컬 캐시를 바이패스하는 프린터 핸들을 반환합니다. 이 메서드는 원격 프린터와의 네트워크 통신을 기다리는 동안 차단되므로 즉시 반환되지 않을 수 있습니다. 이 함수가 얼마나 빨리 반환되는지는 네트워크 상태, 인쇄 서버 구성 및 애플리케이션을 작성할 때 예측하기 어려운 프린터 드라이버 구현 요소와 같은 런타임 요인에 따라 달라집니다. 사용자 인터페이스 상호 작용을 관리하는 스레드에서 이 함수를 호출하면 애플리케이션이 응답하지 않는 것처럼 보일 수 있습니다.

참고

원격 프린터에 대한 OpenPrinter 호출로 얻은 핸들은 인쇄 스풀러 서비스의 로컬 캐시를 통해 프린터에 액세스합니다. 이 캐시는 기본적으로 실시간 정확하지 않습니다. 정확한 데이터를 가져와야 하는 경우 OpenPrinter 호출을 openPrinter2pOptions.dwFlagsPRINTER_OPTION_NO_CACHE 설정합니다. OpenPrinter2W만 작동합니다. 이렇게 하면 함수는 로컬 캐시를 바이패스하기 위해 다른 인쇄 API 호출을 수행하는 프린터 핸들을 반환합니다. 이 방법은 원격 프린터에 대한 왕복 네트워크 통신을 기다리는 동안 차단되므로 즉시 반환되지 않을 수 있습니다. 이 함수가 얼마나 빨리 반환되는지는 네트워크 상태, 인쇄 서버 구성 및 프린터 드라이버 구현과 같은 런타임 요인(애플리케이션을 작성할 때 예측하기 어려운 요소)에 따라 달라집니다. 따라서 사용자 인터페이스와의 상호 작용을 관리하는 스레드에서 이 함수를 호출하면 애플리케이션이 응답하지 않는 것처럼 보일 수 있습니다.

phPrinter가 가리키는 핸들은 스레드로부터 안전하지 않습니다. 호출자가 여러 스레드에서 동시에 사용해야 하는 경우 동기화 함수를 사용하여 프린터 핸들에 대한 사용자 지정 동기화 액세스를 제공해야 합니다. 사용자 지정 코드를 작성하지 않도록 애플리케이션은 필요에 따라 각 스레드에서 프린터 핸들을 열 수 있습니다.

pDefault 매개 변수를 사용하면 StartDocPrinter 함수에서 제출한 문서를 인쇄하는 데 사용되는 데이터 형식 및 디바이스 모드 값을 지정할 수 있습니다. 그러나 문서가 시작된 후 SetJob 함수를 사용하여 이러한 값을 재정의할 수 있습니다.

pDefault 매개 변수의 PRINTER_DEFAULTS 구조에 정의된 DEVMODE 설정은 StartDocPrinter 호출의 pDocInfo 매개 변수에 전달된 DOC_INFO_1 구조체의 pDatatype 멤버 값이 "RAW"인 경우 사용되지 않습니다. 고급 문서(예: Adobe PDF 또는 Microsoft Word 파일) 또는 기타 프린터 데이터(예: PCL, PS 또는 HPGL)가 pDatatype이 "RAW"로 설정된 프린터로 직접 전송되는 경우 문서는 하드웨어에서 이해하는 언어로 DEVMODE 스타일의 인쇄 작업 설정을 완전히 설명해야 합니다.

OpenPrinter 함수를 호출하여 인쇄 서버에 대한 핸들을 열거나 클라이언트가 인쇄 서버에 대한 액세스 권한을 결정할 수 있습니다. 이렇게 하려면 pPrinterName 매개 변수에서 인쇄 서버의 이름을 지정하고, PRINTER_DEFAULTS 구조의 pDatatypepDevMode 멤버를 NULL로 설정하고, DesiredAccess 멤버를 설정하여 SERVER_ALL_ACCESS 같은 서버 액세스 마스크 값을 지정합니다. 핸들을 완료하면 ClosePrinter 함수에 전달하여 닫습니다.

PRINTER_DEFAULTS 구조체의 DesiredAccess 멤버를 사용하여 프린터에 필요한 액세스 권한을 지정합니다. 액세스 권한은 다음 중 하나일 수 있습니다. pDefaultNULL이면 액세스 권한이 PRINTER_ACCESS_USE.

원하는 Access 값 의미
PRINTER_ACCESS_ADMINISTER SetPrinter에서 제공하는 작업과 같은 관리 작업을 수행합니다.
PRINTER_ACCESS_USE 기본 인쇄 작업을 수행합니다.
PRINTER_ALL_ACCESS SYNCHRONIZE를 제외한 모든 관리 작업 및 기본 인쇄 작업을 수행하려면( 표준 액세스 권한 참조)
PRINTER_ACCESS_MANAGE_LIMITED SetPrinter 및SetPrinterData에서 제공하는 작업과 같은 관리 작업을 수행합니다. 이 값은 Windows 8.1 시작해서 사용할 수 있습니다.
일반 보안 값(예: WRITE_DAC 특정 제어 액세스 권한을 허용합니다. 표준 액세스 권한을 참조하세요.

사용자에게 원하는 액세스 권한으로 지정된 프린터 또는 인쇄 서버를 열 수 있는 권한이 없는 경우 OpenPrinter 호출은 반환 값이 0으로 실패하고 GetLastError 는 ERROR_ACCESS_DENIED 값을 반환합니다.

예제

이 함수를 사용하는 샘플 프로그램은 방법: GDI 인쇄 API를 사용하여 인쇄를 참조하세요.

요구 사항

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

추가 정보

인쇄

인쇄 스풀러 API 함수

WritePrinter

ClosePrinter

PRINTER_DEFAULTS

SetJob

SetPrinter

StartDocPrinter