Fonction ExtEscape (wingdi.h)

La fonction ExtEscape permet à une application d’accéder aux fonctionnalités de l’appareil qui ne sont pas disponibles via GDI.

Syntaxe

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

Paramètres

[in] hdc

Handle dans le contexte de l’appareil.

[in] iEscape

Fonction d’échappement à effectuer. Il peut s’agir de l’un des éléments suivants ou d’une fonction d’échappement définie par l’application.

Valeur Signification
CHECKJPEGFORMAT
Vérifie si l’imprimante prend en charge une image JPEG.
CHECKPNGFORMAT
Vérifie si l’imprimante prend en charge une image PNG.
DRAWPATTERNRECT
Dessine un rectangle blanc, gris ou noir.
GET_PS_FEATURESETTING
Obtient des informations sur un paramètre de fonctionnalité spécifié pour un pilote PostScript.
GETTECHNOLOGY
Indique si le pilote est ou non un pilote Postscript.
PASSTHROUGH
Permet à l’application d’envoyer des données directement à une imprimante. Pris en charge en mode de compatibilité et en mode centré sur GDI.
POSTSCRIPT_DATA
Permet à l’application d’envoyer des données directement à une imprimante. Pris en charge uniquement en mode de compatibilité.
POSTSCRIPT_IDENTIFY
Définit un pilote PostScript en mode centré sur GDI ou PostScript.
POSTSCRIPT_INJECTION
Insère un bloc de données brutes dans un flux de travaux PostScript.
POSTSCRIPT_PASSTHROUGH
Envoie des données directement à un pilote d’imprimante PostScript. Pris en charge en mode de compatibilité et en mode postscript centré.
QUERYESCSUPPORT
Détermine si une sortie d’échappement particulière est implémentée par le pilote de périphérique.
SPCLPASSTHROUGH2
Permet aux applications d’inclure des procédures privées et d’autres ressources dans le contexte d’enregistrement au niveau du document.

[in] cjInput

Nombre d’octets de données pointés vers le paramètre lpszInData .

[in] lpInData

Pointeur vers la structure d’entrée requise pour l’échappement spécifié. Voir aussi Notes.

[in] cjOutput

Nombre d’octets de données pointés vers le paramètre lpszOutData .

[out] lpOutData

Pointeur vers la structure qui reçoit la sortie de cette sortie d’échappement. Ce paramètre ne doit pas avoir la valeur NULL si ExtEscape est appelé en tant que fonction de requête. Si aucune donnée ne doit être retournée dans cette structure, définissez cbOutput sur 0. Voir aussi Notes.

Valeur retournée

La valeur de retour spécifie le résultat de la fonction. Elle est supérieure à zéro si la fonction réussit, à l’exception de l’échappement d’imprimante QUERYESCSUPPORT, qui vérifie uniquement l’implémentation. La valeur de retour est égale à zéro si l’échappement n’est pas implémenté. Une valeur de retour inférieure à zéro indique une erreur.

Remarques

Note Il s’agit d’une fonction bloquante ou synchrone qui peut ne pas être retournée immédiatement. La rapidité avec laquelle cette fonction retourne dépend de facteurs d’exécution tels que l’status réseau, la configuration du serveur d’impression et l’implémentation du pilote d’imprimante, facteurs difficiles à prédire lors de l’écriture d’une application. L’appel de cette fonction à partir d’un thread qui gère l’interaction avec l’interface utilisateur peut donner l’impression que l’application ne répond pas.
 
Utilisez cette fonction pour passer une valeur d’échappement définie par le pilote à un appareil.

Utilisez la fonction Échappement pour passer l’une des valeurs d’échappement définies par le système à un appareil, sauf si l’échappement est l’une des échappements définies dans nEscape. ExtEscape peut ne pas fonctionner correctement avec les échappements définis par le système. En particulier, les échappements dans lesquels lpszInData est un pointeur vers une structure qui contient un membre qui est un pointeur échoue.

Notez que le comportement décrit dans cet article est le comportement attendu, mais qu’il incombe au pilote de se conformer à ce modèle.

Les variables référencées par lpszInData et lpszOutData ne doivent pas être identiques ou se chevaucher. Si les variables de taille de mémoire tampon d’entrée et de sortie se chevauchent, il se peut qu’elles ne contiennent pas les valeurs correctes après le retour de l’appel. Pour obtenir de meilleurs résultats, lpszInData et lpszOutData doivent faire référence à différentes variables.

La fonction d’échappement d’imprimante CHECKJPEGFORMAT détermine si une imprimante prend en charge l’impression d’une image JPEG.

Avant d’utiliser la fonction d’échappement d’imprimante CHECKJPEGFORMAT , appelez la fonction d’échappement d’imprimante QUERYESCSUPPORT pour déterminer si le pilote prend en charge CHECKJPEGFORMAT. Pour obtenir un exemple de code illustrant l’utilisation de CHECKJPEGFORMAT, consultez Test d’une imprimante pour la prise en charge JPEG ou PNG.

La fonction d’échappement d’imprimante CHECKPNGFORMAT détermine si une imprimante prend en charge l’impression d’une image PNG.

Avant d’utiliser la fonction d’échappement d’imprimante CHECKJPEGFORMAT , appelez la fonction d’échappement d’imprimante QUERYESCSUPPORT pour déterminer si le pilote prend en charge CHECKJPEGFORMAT. Pour obtenir un exemple de code, consultez Test d’une imprimante pour la prise en charge JPEG ou PNG.

L’échappement d’imprimante DRAWPATTERNRECT crée un rectangle blanc, gris ou noir uni à l’aide des fonctionnalités de modèle et de règle du langage de contrôle de page (PCL) sur Hewlett-Packard imprimantes compatibles avec LaserJet ou LaserJet. Une échelle de gris est un motif gris qui contient un mélange spécifique de pixels noirs et blancs.

Une application doit utiliser l’échappement QUERYESCSUPPORT pour déterminer si l’imprimante est capable de dessiner des modèles et des règles avant d’utiliser l’échappement DRAWPATTERNRECT .

  • Les règles dessinées avec DRAWPATTERNRECT ne sont pas soumises à des régions de découpage dans le contexte de l’appareil.
  • Les applications ne doivent pas essayer d’effacer les modèles et les règles créés avec DRAWPATTERNRECT en plaçant des objets opaques sur eux.

Si l’imprimante prend en charge les règles blanches, celles-ci peuvent être utilisées pour effacer les modèles créés par DRAWPATTERNRECT. Si l’imprimante ne prend pas en charge les règles blanches, il n’existe aucune méthode permettant d’effacer ces modèles.

Si une application ne peut pas utiliser l’échappement DRAWPATTERNRECT et que l’appareil est une imprimante, elle doit généralement utiliser la fonction PatBlt à la place. Notez que si PatBlt est utilisé pour imprimer un rectangle noir, l’application doit utiliser l’opérateur raster BLACKNESS. Toutefois, si l’appareil est un traceur, l’application doit utiliser la fonction Rectangle .

La fonction d’échappement d’imprimante GET_PS_FEATURESETTING récupère des informations sur un paramètre de fonctionnalité spécifié pour un pilote PostScript.

Cette fonction d’échappement est prise en charge uniquement si le pilote PostScript est en mode centré sur PostScript ou en mode centré sur GDI. Pour définir le mode pilote PostScript, appelez la fonction d’échappement POSTSCRIPT_IDENTIFY .

Pour effectuer cette opération, appelez la fonction ExtEscape avec les paramètres suivants.

La fonction d’échappement d’imprimante GET_PS_FEATURESETTING est valide si elle est appelée à tout moment après l’appel de la fonction CreateDC et avant l’appel de la fonction DeleteDC .

La fonction d’échappement d’imprimante GETTECHNOLOGY identifie le type de pilote d’imprimante.

Pour les imprimantes autres que XPSDrv, cette sortie d’échappement indique si le pilote est un pilote Postscript.

Pour les imprimantes XPSDrv, cette sortie d’échappement indique si le pilote est le convertisseur de documents Microsoft XPS (MXDC). Si c’est le cas, l’échappement retourne la chaîne à terminaison zéro "http://schemas.microsoft.com/xps/2005/06" ;

La fonction d’échappement d’imprimante PASSTHROUGH envoie des données directement à un pilote d’imprimante. Pour effectuer cette opération, appelez la fonction ExtEscape avec les paramètres suivants.

La fonction d’échappement d’imprimante PASSTHROUGH est prise en charge par les pilotes PostScript en mode centré sur GDI ou en mode de compatibilité, mais pas en mode centré sur PostScript. Les pilotes en mode centré sur PostScript peuvent utiliser la fonction d’échappement POSTSCRIPT_PASSTHROUGH . Pour définir un mode pilote PostScript, appelez la fonction d’échappement POSTSCRIPT_IDENTIFY .

Pour les données PASSTHROUGH envoyées par les applications EPSPRINTING ou PostScript, le pilote PostScript n’apporte aucune modification. Pour les données PASSTHROUGH envoyées par d’autres applications, si le pilote PostScript utilise le protocole de sortie BCP (Binary Communication Protocol) ou TBCP (Tagged Binary Communication Protocol), le pilote effectue la citation BCP ou TBCP appropriée sur des caractères spéciaux, comme décrit dans « Spécification des protocoles de communication série et parallèle Adobe ». Cela signifie que l’application doit envoyer des données PASSTHROUGH binaires pures ou ASCII.

La fonction d’échappement d’imprimante POSTSCRIPT_DATA envoie des données directement à un pilote d’imprimante. Pour effectuer cette opération, appelez la fonction ExtEscape avec les paramètres suivants.

La fonction POSTSCRIPT_DATA est identique à la fonction d’échappement PASSTHROUGH , sauf qu’elle est prise en charge par les pilotes PostScript en mode de compatibilité uniquement. Il n’est pas pris en charge par les pilotes PostScript en mode centré sur PostScript ou en mode centré sur GDI.

Les pilotes en mode centré sur PostScript peuvent utiliser la fonction d’échappement POSTSCRIPT_PASSTHROUGH , et les pilotes en mode centré sur GDI peuvent utiliser la fonction d’échappement PASSTHROUGH . Pour définir le mode d’un pilote PostScript, appelez la fonction d’échappement POSTSCRIPT_IDENTIFY .

La fonction d’échappement d’imprimante POSTSCRIPT_IDENTIFY définit un pilote PostScript en mode centré sur GDI ou PostScript.

Pour placer le pilote en mode centré sur GDI ou PostScript, appelez d’abord la fonction d’échappement d’imprimante QUERYESCSUPPORT pour déterminer si le pilote prend en charge la fonction d’échappement d’imprimante POSTSCRIPT_IDENTIFY . Dans ce cas, vous pouvez supposer que le pilote est PSCRIPT 5.0. Ensuite, avant d’appeler une autre fonction d’échappement d’imprimante, vous devez appeler POSTSCRIPT_IDENTIFY et spécifier PSIDENT_GDICENTRIC ou PSIDENT_PSCENTRIC. Vous devez appeler les fonctions QUERYESCSUPPORT et POSTSCRIPT_IDENTIFY d’échappement d’imprimante avant d’appeler toute autre fonction d’échappement d’imprimante.

Note Une fois que le pilote PostScript est défini sur le mode centré sur GDI ou le mode centré sur PostScript, vous ne serez plus autorisé à appeler la fonction d’échappement d’imprimante POSTSCRIPT_IDENTIFY .
 
Si vous n’utilisez pas la fonction d’échappement d’imprimante POSTSCRIPT_IDENTIFY, le pilote PostScript est en mode de compatibilité et offre une prise en charge identique pour les fonctions d’échappement d’imprimante PASSTHROUGH, POSTSCRIPT_PASSTHROUGH et POSTSCRIPT_DATA .

Pour les pilotes PostScript qui prennent en charge les fonctions POSTSCRIPT_PASSTHROUGH, PASSTHROUGH et POSTSCRIPT_PASSTHROUGH d’échappement d’imprimante sont identiques.

En mode centré sur PostScript, l’application est responsable de toutes les sorties PostScript qui marquent le papier à l’aide de la fonction d’échappement POSTSCRIPT_PASSTHROUGH . Les fonctions GDI ne sont pas autorisées. Le pilote est responsable de la structure globale du document et des paramètres de contrôle de l’imprimante. L’application peut utiliser la fonction d’échappement d’imprimante POSTSCRIPT_INJECTION pour injecter un bloc de données brutes (y compris des commentaires DSC) dans le flux de travail à des endroits spécifiques.

La fonction d’échappement d’imprimante POSTSCRIPT_INJECTION insère un bloc de données brutes à un point spécifié dans un flux de travail PostScript.

Un pilote PostScript prend en charge cette fonction d’échappement en mode centré sur GDI ou en mode centré sur PostScript, mais pas en mode de compatibilité.

Pour définir le mode du pilote PostScript, appelez la fonction d’échappement POSTSCRIPT_IDENTIFY .

Pour effectuer cette opération, appelez la fonction ExtEscape avec les paramètres suivants.

Le pilote met en cache en interne les données d’injection et les émet aux points appropriés de la sortie. Les informations mises en cache sont vidées quand elles ne sont plus nécessaires. Au plus tard, il est vidé après l’appel EndDoc .

En mode centré sur GDI, l’application peut uniquement injecter des données de bloc DSC valides à l’aide de la fonction d’échappement d’imprimante POSTSCRIPT_INJECTION . Un bloc DSC valide doit remplir toutes les conditions suivantes :

  • Il se compose d’une séquence intégrale de « lignes ».
  • Chaque « ligne » doit commencer par « %% ».
  • Chaque « ligne » à l’exception de la dernière ligne doit se terminer <par CR>, <LF> ou <CR><LF> à l’exception de la dernière ligne. Si la dernière ligne ne se termine pas par CR, LF> ou <CR><LF>, le pilote ajoute <CR><LF> après le dernier octet des données d’injection. <><
  • Chaque « ligne » doit être de 255 octets ou moins, y compris « %% », mais sans compter l’arrêt <de ligne CR>/<LF> .
La fonction d’échappement d’imprimante POSTSCRIPT_PASSTHROUGH envoie des données directement à un pilote d’imprimante PostScript.

Un pilote PostScript prend en charge cette fonction d’échappement en mode centré sur PostScript ou en mode de compatibilité, mais pas en mode centré sur GDI.

Pour définir le mode du pilote PostScript, appelez la fonction d’échappement POSTSCRIPT_IDENTIFY .

La fonction d’échappement d’imprimante QUERYESCSUPPORT vérifie l’implémentation d’une fonction d’échappement d’imprimante.

La fonction d’échappement d’imprimante SPCLPASSTHROUGH2 permet aux applications qui impriment sur des appareils PostScript à l’aide d’EPSPRINTING d’inclure des procédures PostScript privées et d’autres ressources au niveau du contexte d’enregistrement au niveau du document.

Cette sortie d’échappement est prise en charge uniquement pour la compatibilité descendante avec Adobe Acrobat. Les autres applications ne doivent pas utiliser cette séquence d’échappement obsolète.

L’application doit appeler cette séquence d’échappement avant d’appeler StartDoc afin que le pilote met en cache les données à insérer au bon point dans le flux PostScript. Si cette échappement est prise en charge, le pilote autorise également les appels DOWNLOADFACE d’échappement avant StartDoc. Le pilote met en cache en interne les données à insérer et les données requises par les appels DOWNLOADFACE d’échappement avant StartDoc et les émet immédiatement avant %%EndProlog. La séquence d’appels SPCLPASSTHROUGH2 et DOWNLOADFACE est conservée dans l’ordre dans lequel leurs données sont transmises, c’est-à-dire qu’un appel ultérieur génère une sortie de données après les données d’un appel précédent. Le pilote considérera les polices téléchargées par les appels DOWNLOADFACE d’échappement pré-StartDoc comme non disponibles pour la suppression pendant l’étendue du travail.

Cette sortie d’échappement n’est pas enregistrée dans les fichiers EMF par le système d’exploitation. Par conséquent, les applications doivent s’assurer que l’enregistrement EMF est désactivé pour ces travaux utilisant l’échappement.

Exemples

Pour obtenir un exemple, consultez Dimensionnement d’une image JPEG ou PNG.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau uniquement]
Plateforme cible Windows
En-tête wingdi.h (inclure Windows.h)
Bibliothèque Gdi32.lib
DLL Gdi32.dll

Voir aussi

Caractère d'échappement

GetDeviceCaps

Fonctions API du spouleur d’impression

Impression