Compartir a través de


Función ExtEscape (wingdi.h)

La función ExtEscape permite a una aplicación acceder a las funcionalidades del dispositivo que no están disponibles a través de GDI.

Sintaxis

int ExtEscape(
  [in]  HDC    hdc,
  [in]  int    iEscape,
  [in]  int    cjInput,
  [in]  LPCSTR lpInData,
  [in]  int    cjOutput,
  [out] LPSTR  lpOutData
);

Parámetros

[in] hdc

Identificador del contexto del dispositivo.

[in] iEscape

Función de escape que se va a realizar. Puede ser una de las siguientes o puede ser una función de escape definida por la aplicación.

Valor Significado
CHECKJPEGFORMAT
Comprueba si la impresora admite una imagen JPEG.
CHECKPNGFORMAT
Comprueba si la impresora admite una imagen PNG.
DRAWPATTERNRECT
Dibuja un rectángulo blanco, gris o negro.
GET_PS_FEATURESETTING
Obtiene información sobre una configuración de característica especificada para un controlador PostScript.
GETTECHNOLOGY
Informa sobre si el controlador es o no un controlador Postscript.
PASSTHROUGH
Permite que la aplicación envíe datos directamente a una impresora. Compatible con el modo de compatibilidad y el modo centrado en GDI.
POSTSCRIPT_DATA
Permite que la aplicación envíe datos directamente a una impresora. Solo se admite en modo de compatibilidad.
POSTSCRIPT_IDENTIFY
Establece un controlador PostScript en modo centrado en GDI o centrado en PostScript.
POSTSCRIPT_INJECTION
Inserta un bloque de datos sin procesar en un flujo de trabajo de PostScript.
POSTSCRIPT_PASSTHROUGH
Envía datos directamente a un controlador de impresora PostScript. Compatible con el modo de compatibilidad y el modo centrado en PostScript.
QUERYESCSUPPORT
Determina si el controlador de dispositivo implementa un escape determinado.
SPCLPASSTHROUGH2
Permite a las aplicaciones incluir procedimientos privados y otros recursos en el contexto de guardado en el nivel de documento.

[in] cjInput

Número de bytes de datos a los que apunta el parámetro lpszInData .

[in] lpInData

Puntero a la estructura de entrada necesaria para el escape especificado. Vea también Comentarios.

[in] cjOutput

Número de bytes de datos a los que apunta el parámetro lpszOutData .

[out] lpOutData

Puntero a la estructura que recibe la salida de este escape. Este parámetro no debe ser NULL si Se llama a ExtEscape como una función de consulta. Si no se va a devolver ningún dato en esta estructura, establezca cbOutput en 0. Vea también Comentarios.

Valor devuelto

El valor devuelto especifica el resultado de la función. Es mayor que cero si la función se ejecuta correctamente, excepto para el escape de impresora QUERYESCSUPPORT, que comprueba solo la implementación. El valor devuelto es cero si no se implementa el escape. Un valor devuelto menor que cero indica un error.

Comentarios

Nota Se trata de una función de bloqueo o sincrónica que podría no devolverse inmediatamente. La rapidez con la que esta función devuelve 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. 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.
 
Use esta función para pasar un valor de escape definido por el controlador a un dispositivo.

Use la función Escape para pasar uno de los valores de escape definidos por el sistema a un dispositivo, a menos que el escape sea uno de los escapes definidos en nEscape. ExtEscape podría no funcionar correctamente con los escapes definidos por el sistema. En concreto, los escapes en los que lpszInData es un puntero a una estructura que contiene un miembro que es un puntero producirá un error.

Tenga en cuenta que el comportamiento descrito en este artículo es el comportamiento esperado, pero es el controlador el que debe cumplir este modelo.

Las variables a las que hace referencia lpszInData y lpszOutData no deben ser las mismas ni superpuestas. Si las variables de tamaño de búfer de entrada y salida se superponen, es posible que no contengan los valores correctos después de que se devuelva la llamada. Para obtener los mejores resultados, lpszInData y lpszOutData deben hacer referencia a variables diferentes.

La función de escape de impresora CHECKJPEGFORMAT determina si una impresora admite la impresión de una imagen JPEG.

Antes de usar la función de escape de impresora CHECKJPEGFORMAT , llame a la función de escape de impresora QUERYESCSUPPORT para determinar si el controlador admite CHECKJPEGFORMAT. Para obtener código de ejemplo que muestra el uso de CHECKJPEGFORMAT, consulte Probar una impresora para compatibilidad con JPEG o PNG.

La función de escape de impresora CHECKPNGFORMAT determina si una impresora admite la impresión de una imagen PNG.

Antes de usar la función de escape de impresora CHECKJPEGFORMAT , llame a la función de escape de impresora QUERYESCSUPPORT para determinar si el controlador admite CHECKJPEGFORMAT. Para obtener código de ejemplo, consulte Probar una impresora para compatibilidad con JPEG o PNG.

El escape de la impresora DRAWPATTERNRECT crea un rectángulo blanco, gris o negro sólido mediante el patrón y las funcionalidades de regla del lenguaje de control de páginas (PCL) en Hewlett-Packard impresoras compatibles con LaserJet o LaserJet. Una escala de grises es un patrón gris que contiene una combinación específica de píxeles negros y blancos.

Una aplicación debe usar el escape QUERYESCSUPPORT para determinar si la impresora es capaz de dibujar patrones y reglas antes de usar el escape DRAWPATTERNRECT .

  • Las reglas dibujadas con DRAWPATTERNRECT no están sujetas a regiones de recorte en el contexto del dispositivo.
  • Las aplicaciones no deben intentar borrar patrones y reglas creados con DRAWPATTERNRECT colocando objetos opacos sobre ellos.

Si la impresora admite reglas blancas, se pueden usar para borrar patrones creados por DRAWPATTERNRECT. Si la impresora no admite reglas blancas, no hay ningún método para borrar estos patrones.

Si una aplicación no puede usar el escape DRAWPATTERNRECT y el dispositivo es una impresora, generalmente debe usar la función PatBlt en su lugar. Tenga en cuenta que si PatBlt se usa para imprimir un rectángulo negro, la aplicación debe usar el operador de trama BLACKNESS. Sin embargo, si el dispositivo es un trazador, la aplicación debe usar la función Rectangle .

La función de escape de impresora GET_PS_FEATURESETTING recupera información sobre una configuración de característica especificada para un controlador PostScript.

Esta función de escape solo se admite si el controlador PostScript está en modo centrado en PostScript o en modo centrado en GDI. Para establecer el modo de controlador PostScript, llame a la función de escape POSTSCRIPT_IDENTIFY.

Para realizar esta operación, llame a la función ExtEscape con los parámetros siguientes.

La función de escape de impresora GET_PS_FEATURESETTING es válida si se llama a cualquier momento después de llamar a la función CreateDC y antes de llamar a la función DeleteDC .

La función de escape de impresora GETTECHNOLOGY identifica el tipo de controlador de impresora.

En el caso de las impresoras que no son XPSDrv, este escape informa de si el controlador es un controlador Postscript.

En el caso de las impresoras XPSDrv, este escape informa de si el controlador es el convertidor de documentos de Microsoft XPS (MXDC). Si es así, el escape devuelve la cadena terminada en cero "http://schemas.microsoft.com/xps/2005/06"

La función de escape de impresora PASSTHROUGH envía datos directamente a un controlador de impresora. Para realizar esta operación, llame a la función ExtEscape con los parámetros siguientes.

La función de escape de impresora PASSTHROUGH es compatible con los controladores PostScript en modo centrado en GDI o en modo de compatibilidad, pero no en modo centrado en PostScript. Los controladores en el modo centrado en PostScript pueden usar la función de escape POSTSCRIPT_PASSTHROUGH . Para establecer un modo de controlador PostScript, llame a la función de escape POSTSCRIPT_IDENTIFY .

En el caso de los datos PASSTHROUGH enviados por EPSPRINTING o las aplicaciones centradas en PostScript, el controlador PostScript no realizará ninguna modificación. Para los datos PASSTHROUGH enviados por otras aplicaciones, si el controlador PostScript usa el protocolo de salida BCP (Protocolo de comunicación binaria) o TBCP (Protocolo de comunicación binaria etiquetado), el controlador realiza las comillas BCP o TBCP adecuadas en caracteres especiales, como se describe en "Especificación de protocolos de comunicaciones en serie y paralelo de Adobe". Esto significa que la aplicación debe enviar datos PASSTHROUGH binarios o ASCII puros.

La función de escape de impresora POSTSCRIPT_DATA envía datos directamente a un controlador de impresora. Para realizar esta operación, llame a la función ExtEscape con los parámetros siguientes.

La función POSTSCRIPT_DATA es idéntica a la función de escape PASSTHROUGH , excepto que solo es compatible con los controladores postScript en modo de compatibilidad. Los controladores postScript no son compatibles con el modo centrado en PostScript ni en el modo centrado en GDI.

Los controladores en el modo centrado en PostScript pueden usar la función de escape POSTSCRIPT_PASSTHROUGH , y los controladores en el modo centrado en GDI pueden usar la función de escape PASSTHROUGH . Para establecer el modo del controlador PostScript, llame a la función de escape POSTSCRIPT_IDENTIFY .

La función de escape de impresora POSTSCRIPT_IDENTIFY establece un controlador PostScript en modo centrado en GDI o en modo centrado en PostScript.

Para colocar el controlador en modos centrados en GDI o postScript, llame primero a la función de escape de impresora QUERYESCSUPPORT para determinar si el controlador admite la función de escape de impresora POSTSCRIPT_IDENTIFY . Si es así, puede suponer que el controlador es PSCRIPT 5.0. A continuación, antes de llamar a cualquier otra función de escape de impresora, debe llamar a POSTSCRIPT_IDENTIFY y especificar PSIDENT_GDICENTRIC o PSIDENT_PSCENTRIC. Debe llamar a QUERYESCSUPPORT y POSTSCRIPT_IDENTIFY funciones de escape de impresora antes de llamar a cualquier otra función de escape de impresora.

Nota Después de establecer el controlador PostScript en modo centrado en GDI o en modo centrado en PostScript, ya no podrá llamar a la función de escape de impresora POSTSCRIPT_IDENTIFY .
 
Si no usa la función de escape de impresora POSTSCRIPT_IDENTIFY , el controlador PostScript está en modo de compatibilidad y proporciona compatibilidad idéntica con las funciones de escape PASSTHROUGH, POSTSCRIPT_PASSTHROUGH y POSTSCRIPT_DATA impresora.

En el caso de los controladores PostScript que admiten las funciones de escape de impresora POSTSCRIPT_PASSTHROUGH, PASSTHROUGH y POSTSCRIPT_PASSTHROUGH son idénticas.

En el modo centrado en PostScript, la aplicación es responsable de todas las salidas de PostScript que marcan el papel mediante la función de escape POSTSCRIPT_PASSTHROUGH . No se permiten funciones GDI. El controlador es responsable de la estructura general del documento y la configuración del control de impresora. La aplicación puede usar la función de escape de impresora POSTSCRIPT_INJECTION para insertar un bloque de datos sin procesar (incluidos los comentarios de DSC) en el flujo de trabajo en lugares específicos.

La función de escape de impresora POSTSCRIPT_INJECTION inserta un bloque de datos sin procesar en un punto especificado en un flujo de trabajo postScript.

Un controlador PostScript admite esta función de escape en modo centrado en GDI o compatibilidad con el modo centrado en PostScript, pero no en modo de compatibilidad.

Para establecer el modo del controlador PostScript, llame a la función de escape POSTSCRIPT_IDENTIFY .

Para realizar esta operación, llame a la función ExtEscape con los parámetros siguientes.

El controlador almacena internamente en caché los datos de inserción y los emite en los puntos adecuados de la salida. La información almacenada en caché se vacía cuando ya no es necesaria. Al final, se vacía después de la llamada a EndDoc .

En el modo centrado en GDI, la aplicación solo puede insertar datos de bloque DSC válidos mediante la función de escape de impresora POSTSCRIPT_INJECTION . Un bloque DSC válido debe cumplir todas las condiciones siguientes:

  • Consta de una secuencia integral de "líneas".
  • Cada "línea" debe comenzar por "%%".
  • Cada "línea" excepto la última línea debe terminar con <CR>, <LF> o <CR><LF> excepto para la última línea. Si la última línea no termina con CR, LF o CR LF, el controlador anexa <CR><LF> después del último byte de los datos de inyección.>><<><><
  • Cada "línea" debe ser de 255 bytes o menos, incluido el "%%", pero no contar la terminación de línea <CR>/<LF> .
La función de escape de impresora POSTSCRIPT_PASSTHROUGH envía datos directamente a un controlador de impresora PostScript.

Un controlador PostScript admite esta función de escape cuando está en modo centrado en PostScript o en modo de compatibilidad, pero no en modo centrado en GDI.

Para establecer el modo del controlador PostScript, llame a la función de escape POSTSCRIPT_IDENTIFY .

La función de escape de impresora QUERYESCSUPPORT comprueba la implementación de una función de escape de impresora.

La función de escape de impresora SPCLPASSTHROUGH2 permite a las aplicaciones que imprimen en dispositivos PostScript mediante EPSPRINTING incluir procedimientos PostScript privados y otros recursos en el contexto de guardado de nivel de documento.

Este escape solo se admite para la compatibilidad con versiones anteriores con Adobe Acrobat. Otras aplicaciones no deben usar este escape obsoleto.

La aplicación debe llamar a este escape antes de llamar a StartDoc para que el controlador almacene en caché los datos para su inserción en el punto correcto de la secuencia PostScript. Si se admite este escape, el controlador también permitirá las llamadas DOWNLOADFACE de escape antes de StartDoc. El controlador almacena internamente en caché los datos que se van a insertar y los datos requeridos por las llamadas DOWNLOADFACE de escape antes de StartDoc y los emite inmediatamente antes de %%EndProlog. La secuencia de SPCLPASSTHROUGH2 y las llamadas DOWNLOADFACE se conservarán en el orden en que se pasan sus datos, es decir, una llamada posterior da como resultado la salida de datos después de los datos de una llamada anterior. El controlador considerará las fuentes descargadas por las llamadas DOWNLOADFACE de escape anteriores a StartDoc como no disponibles para su eliminación durante el ámbito del trabajo.

El sistema operativo no registra este escape en los archivos EMF, por lo que las aplicaciones deben asegurarse de que la grabación EMF está desactivada para esos trabajos mediante el escape.

Ejemplos

Para obtener un ejemplo, vea Cambiar el tamaño de una imagen JPEG o PNG.

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]
Plataforma de destino Windows
Encabezado wingdi.h (incluye Windows.h)
Library Gdi32.lib
Archivo DLL Gdi32.dll

Consulte también

Escape

GetDeviceCaps

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

Impresión