Función OpenPrinter

La función OpenPrinter recupera un identificador para la impresora o el servidor de impresión especificados u otros tipos de identificadores en el subsistema de impresión.

Sintaxis

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

Parámetros

pPrinterName [in]

Puntero a una cadena terminada en null que especifica el nombre de la impresora o el servidor de impresión, el objeto de impresora, XcvMonitor o XcvPort.

Para un objeto de impresora, use: PrinterName, Job xxxx. Para un XcvMonitor, use: ServerName, XcvMonitor MonitorName. Para un XcvPort, use: ServerName, XcvPort PortName.

Si es NULL, indica el servidor de impresora local.

phPrinter [out]

Puntero a una variable que recibe un identificador (no seguro para subprocesos) al objeto de servidor de impresión o impresora abierto.

El parámetro phPrinter puede devolver un identificador Xcv para su uso con la función XcvData. Para obtener más información sobre XcvData, vea DDK.

pDefault [in]

Puntero a una estructura de PRINTER_DEFAULTS . Este valor puede ser NULL.

Valor devuelto

Si la función se ejecuta correctamente, el valor devuelto es un valor distinto de cero.

Si la función no se realiza correctamente, el valor devuelto es cero.

Comentarios

No llame a este método en DllMain.

Nota

Un identificador obtenido para una impresora remota mediante una llamada a OpenPrinter para una impresora remota accede a la impresora a través de una caché local en el servicio de cola de impresión. Esta memoria caché no es precisa en tiempo real. Para obtener datos precisos, reemplace la llamada a OpenPrinter por OpenPrinter2 por pOptions.dwFlags establecido en PRINTER_OPTION_NO_CACHE. Tenga en cuenta que solo OpenPrinter2W es funcional. La función devuelve un identificador de impresora que usa otras llamadas API de impresión y omite la memoria caché local. Este método se bloquea mientras se espera la comunicación de red con la impresora remota, por lo que es posible que no se devuelva inmediatamente. La rapidez con la que devuelve esta función depende de factores en tiempo de ejecución, como el estado de red, la configuración del servidor de impresión y los factores de implementación de controladores de impresora que son difíciles de predecir al escribir una aplicación. Llamar a esta función desde un subproceso que administra la interacción de la interfaz de usuario podría hacer que la aplicación no responda.

Nota:

Un identificador obtenido por una llamada a OpenPrinter para una impresora remota accederá a la impresora a través de una memoria caché local en el servicio de cola de impresión. Esta memoria caché es, por diseño, no precisa en tiempo real. Si necesita obtener datos precisos, reemplace la llamada a OpenPrinter por OpenPrinter2 por pOptions.dwFlags establecido en PRINTER_OPTION_NO_CACHE. Tenga en cuenta que solo OpenPrinter2W es funcional. Al hacerlo, la función devuelve un identificador de impresora que realiza otras llamadas api de impresión para omitir la memoria caché local. Tenga en cuenta que este enfoque se bloqueará mientras espera la comunicación de red de ida y vuelta a la impresora remota, por lo que es posible que no vuelva inmediatamente. La rapidez con la que devuelve esta función depende de factores en tiempo de ejecución, como el estado de red, la configuración del servidor de impresión y la implementación del controlador de impresora, factores que son difíciles de predecir al escribir una aplicación. Por lo tanto, llamar a esta función desde un subproceso que administra la interacción con la interfaz de usuario podría hacer que la aplicación parezca que no responde.

El identificador al que apunta phPrinter no es seguro para subprocesos. Si los autores de llamadas necesitan usarlo simultáneamente en varios subprocesos, deben proporcionar acceso de sincronización personalizado al identificador de impresora mediante las funciones de sincronización. Para evitar escribir código personalizado, la aplicación puede abrir un identificador de impresora en cada subproceso, según sea necesario.

El parámetro pDefault permite especificar los valores de tipo de datos y modo de dispositivo que se usan para imprimir documentos enviados por la función StartDocPrinter . Sin embargo, puede invalidar estos valores mediante la función SetJob después de iniciar un documento.

La configuración DEVMODE definida en la estructura PRINTER_DEFAULTS del parámetro pDefault no se usa cuando el valor del miembro pDatatype de la estructura DOC_INFO_1 que se pasó en el parámetro pDocInfo de la llamada a StartDocPrinter es "RAW". Cuando un documento de alto nivel (como un archivo adobe PDF o Microsoft Word) u otros datos de impresora (como PCL, PS o HPGL) se envía directamente a una impresora con pDatatype establecido en "RAW", el documento debe describir completamente la configuración del trabajo de impresión de estilo DEVMODE en el idioma comprendido por el hardware.

Puede llamar a la función OpenPrinter para abrir un identificador en un servidor de impresión o para determinar los derechos de acceso que un cliente tiene en un servidor de impresión. Para ello, especifique el nombre del servidor de impresión en el parámetro pPrinterName , establezca los miembros pDatatype y pDevMode de la estructura de PRINTER_DEFAULTS en NULL y establezca el miembro DesiredAccess para especificar un valor de máscara de acceso de servidor, como SERVER_ALL_ACCESS. Cuando termine con el identificador, páselo a la función ClosePrinter para cerrarla.

Use el miembro DesiredAccess de la estructura PRINTER_DEFAULTS para especificar los derechos de acceso que necesita para la impresora. Los derechos de acceso pueden ser uno de los siguientes. (Si pDefault es NULL, los derechos de acceso se PRINTER_ACCESS_USE).

Valor de Acceso deseado Significado
PRINTER_ACCESS_ADMINISTER Para realizar tareas administrativas, como las proporcionadas por SetPrinter.
PRINTER_ACCESS_USE Para realizar operaciones de impresión básicas.
PRINTER_ALL_ACCESS Para realizar todas las tareas administrativas y las operaciones de impresión básicas excepto SYNCHRONIZE (consulte Derechos de acceso estándar).
PRINTER_ACCESS_MANAGE_LIMITED Para realizar tareas administrativas, como las proporcionadas por SetPrinter y SetPrinterData. Este valor está disponible a partir de Windows 8.1.
valores de seguridad genéricos, como WRITE_DAC Para permitir derechos de acceso de control específicos. Consulte Derechos de acceso estándar.

Si un usuario no tiene permiso para abrir una impresora o un servidor de impresión especificados con el acceso deseado, se producirá un error en la llamada a OpenPrinter con un valor devuelto de cero y GetLastError devolverá el valor ERROR_ACCESS_DENIED.

Ejemplos

Para obtener un programa de ejemplo que use esta función, consulte How To: Print Using the GDI Print API.

Requisitos

Requisito Value
Cliente mínimo compatible
Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible
Windows 2000 Server [solo aplicaciones de escritorio]
Encabezado
Winspool.h (incluye Windows.h)
Biblioteca
Winspool.lib
Archivo DLL
Winspool.drv
Nombres Unicode y ANSI
OpenPrinterW (Unicode) y OpenPrinterA (ANSI)

Consulte también

Impresión

Funciones de la API del administrador de trabajos de impresión

WritePrinter

ClosePrinter

PRINTER_DEFAULTS

SetJob

SetPrinter

StartDocPrinter